xiaol 1 year ago
commit
917d279f7f
100 changed files with 32299 additions and 0 deletions
  1. 3 0
      .gitignore
  2. 24 0
      .hbuilderx/launch.json
  3. 265 0
      App.vue
  4. 0 0
      README.md
  5. 3 0
      androidPrivacy.json
  6. 36 0
      api/address.js
  7. 27 0
      api/award.js
  8. 26 0
      api/cart.js
  9. 19 0
      api/category.js
  10. 29 0
      api/coupon.js
  11. 18 0
      api/favorite.js
  12. 37 0
      api/groupBooking.js
  13. 89 0
      api/index.js
  14. 29 0
      api/integral.js
  15. 66 0
      api/login.js
  16. 100 0
      api/merchant.js
  17. 26 0
      api/moments.js
  18. 53 0
      api/money.js
  19. 10 0
      api/myteam.js
  20. 107 0
      api/order.js
  21. 92 0
      api/product.js
  22. 59 0
      api/received.js
  23. 19 0
      api/reply.js
  24. 18 0
      api/seckill.js
  25. 44 0
      api/set.js
  26. 10 0
      api/shareQrCode.js
  27. 11 0
      api/shoping.js
  28. 72 0
      api/sign.js
  29. 136 0
      api/user.js
  30. 124 0
      api/wallet.js
  31. 40 0
      api/wx.js
  32. 36 0
      components/canvasLove/canvasLove.vue
  33. 18 0
      components/empty.vue
  34. 312 0
      components/its-calendar/its-calendar.vue
  35. 133 0
      components/mix-list-cell.vue
  36. 6 0
      components/mix-loading/mix-loading.vue
  37. 231 0
      components/pt-lottery/pt-lottery.vue
  38. 202 0
      components/share.vue
  39. 218 0
      components/ss-calendar/ss-calendar.vue
  40. 1207 0
      components/tki-qrcode/qrcode.js
  41. 210 0
      components/tki-qrcode/tki-qrcode.vue
  42. 122 0
      components/uni-badge/uni-badge.vue
  43. 193 0
      components/uni-countdown/uni-countdown.vue
  44. 96 0
      components/uni-icons/icons.js
  45. 10 0
      components/uni-icons/uni-icons.vue
  46. 230 0
      components/uni-list-item/uni-list-item.vue
  47. 68 0
      components/uni-list/uni-list.vue
  48. 65 0
      components/uni-list/uni-refresh.vue
  49. 87 0
      components/uni-list/uni-refresh.wxs
  50. 194 0
      components/uni-load-more/uni-load-more.vue
  51. 361 0
      components/uni-notice-bar/uni-notice-bar.vue
  52. 198 0
      components/uni-number-box.vue
  53. 22 0
      components/uni-popup/message.js
  54. 25 0
      components/uni-popup/popup.js
  55. 266 0
      components/uni-popup/uni-popup-dialog.vue
  56. 116 0
      components/uni-popup/uni-popup-message.vue
  57. 165 0
      components/uni-popup/uni-popup-share.vue
  58. 294 0
      components/uni-popup/uni-popup.vue
  59. 141 0
      components/uni-rate/uni-rate.vue
  60. 279 0
      components/uni-transition/uni-transition.vue
  61. 226 0
      components/upload-images.vue
  62. 13310 0
      components/wangding-pickerAddress/data.js
  63. 103 0
      components/wangding-pickerAddress/wangding-pickerAddress.vue
  64. 280 0
      components/xuan-popup/xuan-popup.vue
  65. 34 0
      interceptor.js
  66. 46 0
      main.js
  67. 185 0
      manifest.json
  68. 30 0
      node_modules/jweixin-module/README.md
  69. 0 0
      node_modules/jweixin-module/out/index.js
  70. 60 0
      node_modules/jweixin-module/package.json
  71. 11 0
      package-lock.json
  72. 945 0
      pages.json
  73. 500 0
      pages/Withdrawal/Withdrawal.vue
  74. 220 0
      pages/address/address.vue
  75. 327 0
      pages/address/addressManage.vue
  76. 173 0
      pages/address/shopList.vue
  77. 511 0
      pages/award/award.vue
  78. 351 0
      pages/award/withdmoenys.vue
  79. 501 0
      pages/award/withdrawal.vue
  80. 697 0
      pages/cart/cart.vue
  81. 733 0
      pages/cart/cart2.vue
  82. 733 0
      pages/cart/cart4.vue
  83. 733 0
      pages/cart/cart5.vue
  84. 378 0
      pages/category/category.vue
  85. 167 0
      pages/contract/agreement.vue
  86. 252 0
      pages/contract/privacy.vue
  87. 137 0
      pages/contract/start.vue
  88. 94 0
      pages/coupon/consumer.vue
  89. 307 0
      pages/coupon/coupon.vue
  90. 372 0
      pages/coupon/details.vue
  91. 332 0
      pages/detail/detail.vue
  92. 167 0
      pages/favorites/favorites.vue
  93. 192 0
      pages/gift/gift.vue
  94. 388 0
      pages/groupBooking/detail.vue
  95. 257 0
      pages/groupBooking/index.vue
  96. 75 0
      pages/groupBooking/inviteImg.vue
  97. 809 0
      pages/index/index.vue
  98. 22 0
      pages/invite/invite.vue
  99. 318 0
      pages/merchant/becomeShop.vue
  100. 226 0
      pages/merchant/commodity.vue

+ 3 - 0
.gitignore

@@ -0,0 +1,3 @@
+unpackage/debug
+unpackage/dist
+unpackage/resources

+ 24 - 0
.hbuilderx/launch.json

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

+ 265 - 0
App.vue

@@ -0,0 +1,265 @@
+<script>
+/**
+ * vuex管理登陆状态,具体可以参考官方登陆模板示例
+ */
+import { mapMutations } from 'vuex';
+// #ifdef H5
+import { weixindata } from './utils/wxAuthorized';
+// #endif
+// #ifdef APP-PLUS
+import { getUpApp } from './utils/upApp.js';
+// #endif
+export default {
+	data() {
+		return {};
+	},
+	onLaunch: function(urlObj) {
+		let obj = this;
+		// 加载缓存中的用户信息
+		let userInfo = uni.getStorageSync('userInfo') || '';
+		// 判断是否拥有用户信息
+		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();
+			// let openid = uni.getStorageSync('openid');
+			// alert(!openid == true)
+			// if(!openid) {
+			// 	uni.navigateTo({
+			// 		url:'/pages/public/wxLogin'
+			// 	})
+			// }
+		}
+		// #endif
+		// #ifdef APP-PLUS
+		// 判断是否升级
+		getUpApp();
+		// 获取当前运行系统
+		let system = uni.getStorageSync('platform') || '';
+		if (!system) {
+			uni.setStorage({
+				key: 'platform',
+				data: uni.getSystemInfoSync().platform
+			});
+		}
+		// #endif
+	},
+	onShow: function() {
+		// 加载拦截
+		// console.log('App Show');
+	},
+	onHide: function() {
+		// console.log('App Hide');
+	},
+	methods: {
+		...mapMutations('user', ['setUserInfo', 'login', 'hasLogin'])
+	}
+};
+</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;
+}
+page {
+	width: 0;
+	min-width: 100%;
+}
+/* 骨架屏替代方案 */
+.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;
+		}
+	}
+}
+// 设置富文本中图片最大宽度
+uni-rich-text img {
+	max-width: 100% !important;
+}
+/*边框*/
+.b-b:after,
+.b-t:after {
+	position: absolute;
+	z-index: 3;
+	left: 0;
+	right: 0;
+	height: 0;
+	content: '';
+	transform: scaleY(0.5);
+	border-bottom: 1px solid $border-color-base;
+}
+
+.b-b:after {
+	bottom: 0;
+}
+
+.b-t:after {
+	top: 0;
+}
+
+/* button样式改写 */
+uni-button,
+button {
+	height: 80rpx;
+	line-height: 80rpx;
+	font-size: $font-lg + 2rpx;
+	font-weight: normal;
+
+	&.no-border:before,
+	&.no-border:after {
+		border: 0;
+	}
+}
+
+uni-button[type='default'],
+button[type='default'] {
+	color: $font-color-dark;
+}
+
+/* input 样式 */
+.input-placeholder {
+	color: #999999;
+}
+
+.placeholder {
+	color: #999999;
+}
+// 边距样式
+@for $i from 1 to 4 {
+	.margin-l-#{$i * 10} {
+		margin-left: $i * 10rpx !important;
+	}
+	.margin-r-#{$i * 10} {
+		margin-right: $i * 10rpx !important;
+	}
+	.margin-t-#{$i * 10} {
+		margin-top: $i * 10rpx !important;
+	}
+	.margin-b-#{$i * 10} {
+		margin-bottom: $i * 10rpx !important;
+	}
+	.margin-#{$i * 10} {
+		margin: $i * 10rpx !important;
+	}
+	.margin-v-#{$i * 10} {
+		margin-top: $i * 10rpx !important;
+		margin-bottom: $i * 10rpx !important;
+	}
+	.margin-c-#{$i * 10} {
+		margin-left: $i * 10rpx !important;
+		margin-right: $i * 10rpx !important;
+	}
+	.padding-l-#{$i * 10} {
+		padding-left: $i * 10rpx !important;
+	}
+	.padding-r-#{$i * 10} {
+		padding-right: $i * 10rpx !important;
+	}
+	.padding-t-#{$i * 10} {
+		padding-top: $i * 10rpx !important;
+	}
+	.padding-b-#{$i * 10} {
+		padding-bottom: $i * 10rpx !important;
+	}
+	.padding-#{$i * 10} {
+		padding: $i * 10rpx !important;
+	}
+	.padding-v-#{$i * 10} {
+		padding-top: $i * 10rpx !important;
+		padding-bottom: $i * 10rpx !important;
+	}
+	.padding-c-#{$i * 10} {
+		padding-left: $i * 10rpx !important;
+		padding-right: $i * 10rpx !important;
+	}
+}
+// 字体大小
+.font-size-sm {
+	font-size: $font-sm;
+}
+.font-size-base {
+	font-size: $font-base;
+}
+.font-size-lg {
+	font-size: $font-lg;
+}
+// 字体颜色
+.font-color-yellow {
+	color: $color-yellow;
+}
+.font-color-gray {
+	color: $color-gray;
+}
+.font-color-red {
+	color: $color-red;
+}
+// 边框颜色
+.border-color-yellow {
+	border: 1rpx solid $color-yellow;
+}
+
+// 修改默认背景颜色
+uni-page-wrapper {
+	background-color: $page-color-base;
+}
+</style>

+ 0 - 0
README.md


+ 3 - 0
androidPrivacy.json

@@ -0,0 +1,3 @@
+{
+    "prompt" : "template"
+}

+ 36 - 0
api/address.js

@@ -0,0 +1,36 @@
+import request from '@/utils/request'
+
+export function getAddressList(data) {
+	return request({
+		url: '/api/address/list',
+		method: 'get',
+		data
+	});
+}
+export function addressEdit(data) {
+	return request({
+		url: '/api/address/edit',
+		method: 'post',
+		data
+	});
+}
+// 删除地址
+export function addressDel(data) {
+	return request({
+		url: '/api/address/del',
+		method: 'post',
+		data
+	});
+}
+
+// 获取门店信息
+// export function addressDel(data) {
+// 	return request({
+// 		url: '/api/address/del',
+// 		method: 'post',
+// 		data
+// 	});
+// }
+
+
+

+ 27 - 0
api/award.js

@@ -0,0 +1,27 @@
+import request from '@/utils/request'
+
+// 佣金明细
+export function spreadCommission(data,type) {
+	return request({
+		url: '/api/spread/commission/'+type,
+		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
+	});
+}

+ 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
+	});
+}

+ 19 - 0
api/category.js

@@ -0,0 +1,19 @@
+import request from '@/utils/request'
+
+// 获取商品分类
+export function getList(data) {
+	return request({
+		url: '/api/category',
+		method: 'get',
+		data
+	});
+}
+// export function getList(id) {
+// 	return request({
+// 		url: '/api/category',
+// 		method: 'get',
+// 		data: {
+// 			id:id
+// 		}
+// 	});
+// }

+ 29 - 0
api/coupon.js

@@ -0,0 +1,29 @@
+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
+	});
+}

+ 18 - 0
api/favorite.js

@@ -0,0 +1,18 @@
+import request from '@/utils/request'
+
+//获取收藏夹列表
+export function getcollectList(data) {
+	return request({
+		url: '/api/collect/user',
+		method: 'get',
+		data
+	});
+}
+// 取消收藏
+export function delcollect(data) {
+	return request({
+		url: '/api/collect/del',
+		method: 'post',
+		data
+	});
+}

+ 37 - 0
api/groupBooking.js

@@ -0,0 +1,37 @@
+import request from '@/utils/request'
+
+// 获取拼团列表
+export function getCombinationList(data) {
+	return request({
+		url: '/api/combination/list',
+		method: 'get',
+		data
+	});
+}
+
+//取消拼团
+export function getCombinationLisRemove(data,id) {
+	return request({
+		url: '/api/combination/remove'+id,
+		method: 'get',
+		data
+	});
+}
+
+//拼团开团页面数据
+export function getCombinationLisPink(data,id) {
+	return request({
+		url: '/api/combination/pink/'+id,
+		method: 'get',
+		data
+	});
+}
+
+// 获取拼团海报
+export function getCombinationPoster(data) {
+	return request({
+		url: '/api/combination/poster',
+		method: 'post',
+		data
+	});
+}

+ 89 - 0
api/index.js

@@ -0,0 +1,89 @@
+import request from '@/utils/request'
+// 处理bug用
+export function groom(data,id) {
+	return request({
+		url: '/api/groom/list/' + id,
+		method: 'get',
+		data
+	});
+}
+// 获取首页商品积分列表
+export function groom5(data) {
+	return request({
+		url: '/api/groom/list/5',
+		method: 'get',
+		data
+	});
+}
+
+// 获取礼包商品列表
+export function groom6(data) {
+	return request({
+		url: '/api/groom/list/6',
+		method: 'get',
+		data
+	});
+}
+
+
+// 促销商品
+export function groom4(data) {
+	return request({
+		url: '/api/groom/list/4',
+		method: 'get',
+		data
+	});
+}
+// 精品推荐
+export function groom1(data) {
+	return request({
+		url: '/api/groom/list/1',
+		method: 'get',
+		data
+	});
+}
+// 新品首发
+export function groom3(data) {
+	return request({
+		url: '/api/groom/list/3',
+		method: 'get',
+		data
+	});
+}
+
+// 获取首页信息
+export function loadIndexs(data) {
+	return request({
+		url: '/api/index',
+		method: 'get',
+		data
+	});
+}
+//获取门店列表
+export function store_list(data) {
+	return request({
+		url: '/api/store_list',
+		method: 'get',
+		data
+	});
+}
+
+//获取门店信息
+export function getStore(data) {
+	return request({
+		url: '/api/store',
+		method: 'get',
+		data
+	});
+}
+
+//获取门店分类
+export function getStoreType(data) {
+	return request({
+		url: '/api/store_category',
+		method: 'get',
+		data
+	});
+}
+
+//

+ 29 - 0
api/integral.js

@@ -0,0 +1,29 @@
+import request from '@/utils/request'
+
+//	积分列表
+export function integrallist(data) {
+	return request({
+		url: '/api/integral/list',
+		method: 'get',
+		data
+	});
+}
+
+//	积分列表
+export function rechList(data) {
+	return request({
+		url: '/api/rech',
+		method: 'get',
+		data
+	});
+}
+//	消费券列表
+export function consumerList(data) {
+	return request({
+		url: '/api/consumer/list',
+		method: 'get',
+		data
+	});
+}
+
+

+ 66 - 0
api/login.js

@@ -0,0 +1,66 @@
+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 getUser(data) {
+	return request({
+		url: '/api/user',
+		method: 'get',
+		data
+	});
+}
+
+// 短信登录
+export function loginMobile(data) {
+	return request({
+		url: '/api/login/mobile',
+		method: 'post',
+		data
+	});
+}
+// 微信授权登录
+export function loginWx(data) {
+	return request({
+		url: '/api/wechat/appauth',
+		method: 'get',
+		data
+	});
+}
+
+
+

+ 100 - 0
api/merchant.js

@@ -0,0 +1,100 @@
+import request from '@/utils/request'
+
+//店铺订单列表
+export function merchantList(data) {
+	return request({
+		url: '/api/admin/order/list',
+		method: 'get',
+		data
+	});
+}
+
+//店铺订单详情
+export function detail(data, id) {
+	return request({
+		url: '/api/admin/order/detail/' + id,
+		method: 'get',
+		data
+	});
+}
+
+// 店铺订单每月统计数据
+export function shop_data(data) {
+	return request({
+		url: '/api/admin/order/month',
+		method: 'get',
+		data
+	});
+}
+
+// 店铺信息
+export function my(data) {
+	return request({
+		url: '/api/store/my',
+		method: 'post',
+		data
+	});
+}
+
+// 店铺会员列表
+export function member(data) {
+	return request({
+		url: '/api/store/member',
+		method: 'post',
+		data
+	});
+}
+
+// 店铺商品列表
+export function goods(data) {
+	return request({
+		url: '/api/store/goods',
+		method: 'post',
+		data
+	});
+}
+
+//订单核销
+export function verific(data) {
+	return request({
+		url: '/api/order/order_verific',
+		method: 'post',
+		data
+	});
+}
+
+//卡片兑换
+export function verification(data) {
+	return request({
+		url: '/api/user/verification',
+		method: 'post',
+		data
+	});
+}
+
+// 新店铺首页
+// export function storeIndex(data) {
+// 	return request({
+// 		url: '/api/user_store/index',
+// 		method: 'get',
+// 		data
+// 	});
+// }
+
+// 新店铺收益
+export function bill(data) {
+	return request({
+		url: '/api/user_store/bill',
+		method: 'get',
+		data
+	});
+}
+
+// 新店铺提现
+export function extract(data) {
+	return request({
+		url: '/api/user_store/extract',
+		method: 'post',
+		data
+	});
+}

+ 26 - 0
api/moments.js

@@ -0,0 +1,26 @@
+import request from '@/utils/request'
+
+export function category(data) {
+	return request({
+		url: '/api/article/category/list',
+		method: 'get',
+		data
+	});
+}
+export function article(data,cid) {
+	return request({
+		url: '/api/article/list/'+cid,
+		method: 'get',
+		data
+	});
+}
+export function details(data,id) {
+	return request({
+		url: '/api/article/details/'+id,
+		method: 'get',
+		data
+	});
+}
+
+
+

+ 53 - 0
api/money.js

@@ -0,0 +1,53 @@
+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
+	});
+}
+// 计算订单
+export function compOrder(data) {
+	return request({
+		url: '/api/order/computed',
+		method: 'post',
+		data
+	});
+}
+// 生成订单
+export function order(data) {
+	return request({
+		url: '/api/order/create',
+		method: 'post',
+		data
+	});
+}

+ 10 - 0
api/myteam.js

@@ -0,0 +1,10 @@
+import request from '@/utils/request'
+
+// 获取我的团队
+export function spreadPeople(data) {
+	return request({
+		url: '/api/spread/people',
+		method:'post',
+		data
+	});
+}

+ 107 - 0
api/order.js

@@ -0,0 +1,107 @@
+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 orderList(data) {
+	return request({
+		url: '/api/order/list',
+		method: 'get',
+		data
+	});
+}
+// 订单详细
+export function orderDetail(data, orderid) {
+	return request({
+		url: '/api/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/order/del',
+		method: 'get',
+		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 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 apply(data) {
+	return request({
+		url: '/api/user_store/apply',
+		method: 'post',
+		data
+	});
+}

+ 92 - 0
api/product.js

@@ -0,0 +1,92 @@
+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 goodsDetail(data, id) {
+	return request({
+		url: '/api/product/detail/' + id,
+		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 seckillGoods(data,id) {
+	return request({
+		url: '/api/seckill/detail/'+id,
+		method: 'get',
+		data
+	});
+}
+// 获取拼团商品详细
+export function groupGoods(data,id) {
+	return request({
+		url: '/api/combination/detail/'+id,
+		method: 'get',
+		data
+	});
+}
+
+

+ 59 - 0
api/received.js

@@ -0,0 +1,59 @@
+import request from '@/utils/request'
+
+
+// 获取商户收款码
+export function receivedCollectionCode(data,id) {
+	return request({
+		url: '/api/received/collection_code',
+		method: 'get',
+		data
+	});
+}
+// 获取付款码
+export function receivedPaymentCode(data,id) {
+	return request({
+		url: '/api/received/payment_code',
+		method: 'get',
+		data
+	});
+}
+// 检测是否有效
+export function receivedCodeState(data,id) {
+	return request({
+		url: '/api/received/code_state',
+		method: 'post',
+		data
+	});
+}
+// 创建订单
+export function receivedPaymentCreate(data,id) {
+	return request({
+		url: '/api/received/payment_create',
+		method: 'post',
+		data
+	});
+}
+// 我的订单
+export function receivedLst(data,id) {
+	return request({
+		url: '/api/received/lst',
+		method: 'get',
+		data
+	});
+}
+// 收款记录
+export function collectionLst(data,id) {
+	return request({
+		url: '/api/received/collection_lst',
+		method: 'post',
+		data
+	});
+}
+// 已提醒
+export function collectionSetTip(data,id) {
+	return request({
+		url: '/api/received/collection_set_tip',
+		method: 'post',
+		data
+	});
+}

+ 19 - 0
api/reply.js

@@ -0,0 +1,19 @@
+import request from '@/utils/request'
+
+
+// 产品评价数量和好评度
+export function reply_config(data,id) {
+	return request({
+		url: '/api/reply/config/'+id,
+		method: 'get',
+		data
+	});
+}
+// 获取产品评论
+export function reply_list(data,id) {
+	return request({
+		url: '/api/reply/list/'+id,
+		method: 'get',
+		data
+	});
+}

+ 18 - 0
api/seckill.js

@@ -0,0 +1,18 @@
+import request from '@/utils/request'
+
+// 获取秒杀分类
+export function getClass(data) {
+	return request({
+		url: '/api/seckill/index',
+		method: 'get',
+		data
+	});
+}
+// 获取秒杀列表
+export function getList(data,id) {
+	return request({
+		url: '/api/seckill/list/'+id,
+		method: 'get',
+		data
+	});
+}

+ 44 - 0
api/set.js

@@ -0,0 +1,44 @@
+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 binding(data) {
+	return request({
+		url: '/api/binding',
+		method: 'post',
+		data
+	});
+}
+//苹果生成账户
+export function applelogin(data) {
+	return request({
+		url: '/api/applelogin',
+		method: 'post',
+		data
+	});
+}

+ 10 - 0
api/shareQrCode.js

@@ -0,0 +1,10 @@
+import request from '@/utils/request'
+
+// 邀请用户
+export function spreadBanner(data) {
+	return request({
+		url: '/api/spread/banner',
+		method: 'get',
+		data
+	});
+}

+ 11 - 0
api/shoping.js

@@ -0,0 +1,11 @@
+import request from '@/utils/request'
+
+
+// 获取店铺信息
+export function getShoping(data, id) {
+	return request({
+		url: '/api/store_info/' + id,
+		method: 'get',
+		data
+	});
+}

+ 72 - 0
api/sign.js

@@ -0,0 +1,72 @@
+import request from '@/utils/request'
+
+// 获取签到列表
+export function signList(data) {
+	return request({
+		url: '/api/sign/list',
+		method: 'get',
+		data
+	});
+}
+// 点击签到
+export function integral(data) {
+	return request({
+		url: '/api/sign/integral',
+		method: 'post',
+		data
+	});
+}
+
+// 签到信息
+export function signUser(data) {
+	return request({
+		url: '/api/sign/user',
+		method: 'post',
+		data
+	});
+}
+
+// 抽奖详情
+export function getgacha(data) {
+	return request({
+		url: '/api/gacha',
+		method: 'get',
+		data
+	});
+}
+
+// 抽奖结果
+export function gacha(data) {
+	return request({
+		url: '/api/gacha',
+		method: 'post',
+		data
+	});
+}
+
+// 抽奖记录
+export function gachalog(data) {
+	return request({
+		url: '/api/gacha/log',
+		method: 'get',
+		data
+	});
+}
+
+// 兑换积分
+export function dhjp(data, id) {
+	return request({
+		url: '/api/gacha/get/' + id,
+		method: 'post',
+		data
+	});
+}
+
+// 核销奖品
+export function writer(data) {
+	return request({
+		url: '/api/admin/gacha/writer',
+		method: 'post',
+		data
+	});
+}

+ 136 - 0
api/user.js

@@ -0,0 +1,136 @@
+import request from '@/utils/request'
+
+// 订单统计信息
+export function orderData(data) {
+	return request({
+		url: '/api/order/data',
+		method: 'get',
+		data
+	});
+}
+
+// 订单统计信息
+export function orderVerific(data) {
+	return request({
+		url: '/api/order/order_verific',
+		method: 'post',
+		data
+	});
+}
+
+// 获取用户信息
+export function userinfo(data) {
+	return request({
+		url: '/api/userinfo',
+		method: 'get',
+		data
+	});
+}
+//获取会员
+export function getVip(data) {
+	return request({
+		url: '/api/level/lst',
+		method: 'get',
+		data
+	});
+}
+//开通会员
+export function becomeVip(data) {
+	return request({
+		url: '/api/level/recharge',
+		method: 'post',
+		data
+	});
+}
+// 获取用户信息
+export function getUserInfo(data) {
+	return request({
+		url: '/api/user',
+		method: 'get',
+		data
+	});
+}
+
+// 用户分享图
+export function spreadBanner(data) {
+	return request({
+		url: '/api/spread/banner',
+		method: 'get',
+		data
+	});
+}
+
+// 上级列表
+export function m_spread_list(data) {
+	return request({
+		url: '/api/user/m_spread_list',
+		method: 'get',
+		data
+	});
+}
+
+// 绑定上级
+export function m_spread(data) {
+	return request({
+		url: '/api/user/m_spread',
+		method: 'post',
+		data
+	});
+}
+
+// 流动积分页面的积分 转账
+export function jfzz(data) {
+	return request({
+		url: '/api/transfer',
+		method: 'post',
+		data
+	})
+}
+
+
+// 固定积分
+export function gdjf(data) {
+	return request({
+		url: '/api/award_integral',
+		method: 'get',
+		data
+	})
+}
+
+// 账号列表
+export function myList(data) {
+	return request({
+		url: '/api/sub_user',
+		method:'get',
+		data
+	})
+}
+
+
+// 添加账号
+export function addZ(data) {
+	return request({
+		url: '/api/sub_user/register',
+		method:'post',
+		data
+	})
+}
+
+
+// 添加账号
+export function change_user(data) {
+	return request({
+		url: '/api/change_user',
+		method:'post',
+		data
+	})
+}
+
+//  退出登录
+export function logout(data) {
+	return request({
+		url: '/api/logout',
+		method:'get',
+		data
+	})
+}

+ 124 - 0
api/wallet.js

@@ -0,0 +1,124 @@
+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 rechargemoneys(data) {
+	return request({
+		url: '/api/user/do',
+		method: 'get',
+		data
+	});
+}
+
+//佣金转余额
+export function extractCashs(data) {
+	return request({
+		url: '/api/recharge/wechat',
+		method: 'post',
+		data
+	});
+}
+
+
+// 提现信息
+export function extractBank(data) {
+	return request({
+		url: '/api/extract/bank',
+		method: 'get',
+		data
+	});
+}
+// 佣金信息
+export function commission(data) {
+	return request({
+		url: '/api/commission',
+		method: 'get',
+		data
+	});
+}
+
+
+// 充值
+export function rechargeWechat(data) {
+	return request({
+		url: '/api/recharge/wechat',
+		method: 'post',
+		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 getRechargeList(data) {
+	return request({
+		url: '/api/recharge/index',
+		method: 'get',
+		data
+	});
+}
+
+
+//	积分列表
+export function integrallist(data) {
+	return request({
+		url: '/api/integral/list',
+		method: 'get',
+		data
+	});
+}

+ 40 - 0
api/wx.js

@@ -0,0 +1,40 @@
+import request from '@/utils/request'
+import store from '@/store';
+// #ifdef H5
+//微信配置
+export function wechatConfig(data) {
+	return request({
+		url: '/api/wechat/config',
+		method: 'get',
+		data:{
+			url:window.location.href
+		}
+	});
+}
+// 微信分享信息
+export function share(data) {
+	return request({
+		url: '/api/share',
+		method: 'get',
+		data
+	});
+}
+// 微信h5code地址
+export function wechatAuth(data) {
+	return request({
+		url: '/api/wechat/openid',
+		method: 'get',
+		data
+	});
+}
+// #endif
+// #ifdef MP-WEIXIN
+// 微信小程序code地址
+export function wechatMpAuth(data) {
+	return request({
+		url: '/api/wechat/mp_auth',
+		method: 'post',
+		data
+	});
+}
+// #endif

+ 36 - 0
components/canvasLove/canvasLove.vue

@@ -0,0 +1,36 @@
+<template>
+	<canvas class="canvasBox" :id="'canvasId_' + canvasId"></canvas>
+</template>
+
+<script>
+export default {
+	props: {
+		canvasId: {
+			type: String,
+			default: '1'
+		}
+	},
+	data() {
+		return {
+			canvasObj: value
+		};
+	},
+	created() {
+		// 保存画布对象
+		this.canvasObj = uni.createCanvasContext('canvasId' + this.canvasId, this);
+		
+		// 获取可使用窗口宽度
+		let width = uni.getSystemInfoSync().windowWidth 
+		this.width = `${width}px` 
+		
+	}
+};
+</script>
+
+<style>
+	.canvasBox{
+		width: 110rpx;
+		height: 370rpx;
+	}
+	
+</style>

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


+ 312 - 0
components/its-calendar/its-calendar.vue

@@ -0,0 +1,312 @@
+<template>
+	<view>
+		<view class="calendar">
+			<scroll-view scroll-x="true" class="top-wrap">
+				<view class="time-wrap" v-for="(dayitem,dayindex) in dayArr" :key="dayindex"
+					:class="{'action':day_index ==dayindex }" @click.stop="dayList(dayitem,dayindex)">
+					<view class="time-xq">{{dayitem.weeks}}</view>
+					<view class="time-val">{{dayitem.days}}</view>
+				</view>
+			</scroll-view>
+			<view scroll-y class="calendar_time">
+				<view class="time_x" :class="host_index == item.timeStamp ? 'time_x_sty' : ''"
+					v-for="(item, index) in hostArr[day_index]" :key="index"
+					@click="nowTimes < item.timeStamp ? hosts(item) : ''"
+					:style="{'color': (nowTimes > item.timeStamp ? '#999999' : '')}">{{item.hours}}</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		props: {
+			sta_num: {
+				type: Number | String,
+				default: 8
+			},
+			end_num: {
+				type: Number | String,
+				default: 23
+			},
+			int_num: {
+				type: Number | String,
+				default: 30
+			},
+		},
+		watch: {
+			sta_num(xin, low) {
+				console.log('改变了')
+				this.sxym()
+			}
+		},
+		data() {
+			return {
+				dayArr: [],
+				hostArr: [],
+				day_index: 0,
+				host_index: '',
+				host_All: [],
+				nowTimes: '',
+			}
+		},
+		mounted() {
+			this.sxym()
+		},
+		methods: {
+			sxym() {
+				console.log('执行获取', this.sta_num, this.end_num)
+				try {
+					let dateArr = [];
+					let today = new Date();
+					let nowTime = today.getTime() // 当前时间戳
+					this.nowTimes = parseInt(nowTime / 1000)
+					for (let i = 0; i < 6; i++) {
+						let newDate = new Date(today.getTime() + i * 1000 * 60 * 60 * 24);
+						let month = (parseInt(newDate.getMonth()) + 1) > 9 ? (parseInt(newDate.getMonth()) + 1) : "0" + (
+							parseInt(
+								newDate.getMonth()) + 1); // 当前月份
+						let day = (newDate.getDate()) > 9 ? newDate.getDate() : "0" + newDate.getDate(); //当前日期
+						let backTime = newDate.getTime(); // 几天后时间戳
+						let backDays = newDate.getDay(); // 几天后周几
+						let remTime = (backTime - nowTime) / 1000; // 距离今天几天
+						let week = '';
+						// if (remTime == 0) {
+						// 	week = "今天"
+						// } else if (remTime == 86400) {
+						// 	week = "明天"
+						// } else if (remTime == 172800) {
+						// 	week = "后天"
+						// } else {
+						if (backDays == 0) {
+							week = "周日";
+						} else if (backDays == 1) {
+							week = "周一";
+						} else if (backDays == 2) {
+							week = "周二";
+						} else if (backDays == 3) {
+							week = "周三";
+						} else if (backDays == 4) {
+							week = "周四";
+						} else if (backDays == 5) {
+							week = "周五";
+						} else if (backDays == 6) {
+							week = "周六";
+						}
+						// }
+						// let fullDate = `${month}-${day}`;
+						let fullDate = `${day}`;
+						let ass = {
+							weeks: week,
+							days: fullDate
+						};
+						dateArr.push(ass);
+					}
+					this.dayArr = dateArr;
+
+					let timeArr = [];
+					for (let i = 0; i < 6; i++) {
+						// let as = new Date(new Date().toLocaleDateString()).getTime() / 1000
+						let as = new Date(new Date().toLocaleDateString()).getTime() / 1000 + i * 60 * 60 * 24;
+						let staTime = this.sta_num * 60 * 60 + as;
+						let endTime = this.end_num * 60 * 60 + as;
+						let int = this.int_num * 60;
+						let timeArr_s = [];
+						for (staTime; staTime < endTime - int; staTime + int) {
+							staTime = staTime + int;
+							let hours = this.times(staTime);
+							let asb = {
+								hours,
+								timeStamp: staTime
+							};
+							timeArr_s.push(asb);
+						}
+						timeArr.push(timeArr_s);
+					}
+					this.hostArr = timeArr;
+					console.log(this.hostArr, 'hostArr')
+				} catch (e) {
+					//TODO handle the exception
+					console.log(e)
+				}
+
+			},
+			// 点击日期
+			dayList(e, index) {
+				this.day_index = index;
+			},
+			// 点击时间
+			hosts(e) {
+				this.host_All = e;
+				this.host_index = e.timeStamp;
+				this.sub()
+			},
+			// 点击立即预约
+			sub() {
+				if (this.host_index == '') {
+					this.$tool.toast('请选择时间');
+				} else {
+					let day = this.dayArr[this.day_index];
+					let time = this.time(this.host_index);
+					let comTime = {
+						days: day.days,
+						weeks: day.weeks,
+						hours: this.host_All.hours,
+						timeStamp: this.host_All.timeStamp,
+						time: time
+					};
+					this.$emit('getTime', comTime);
+				}
+			},
+			// 格式化时间
+			times(data) {
+				let date = new Date(data * 1000);
+				//时间戳为10位需*1000,时间戳为13位的话不需乘1000
+				let h = date.getHours();
+				h = h < 10 ? ('0' + h) : h; //小时补0
+				let m = date.getMinutes();
+				m = m < 10 ? ('0' + m) : m; //分钟补0
+				return h + ':' + m;
+			},
+			time(data, type) {
+				let date = new Date(data * 1000);
+				//时间戳为10位需*1000,时间戳为13位的话不需乘1000
+				let y = date.getFullYear();
+				let MM = date.getMonth() + 1;
+				MM = MM < 10 ? ('0' + MM) : MM; //月补0
+				let d = date.getDate();
+				d = d < 10 ? ('0' + d) : d; //天补0
+				let h = date.getHours();
+				h = h < 10 ? ('0' + h) : h; //小时补0
+				let m = date.getMinutes();
+				m = m < 10 ? ('0' + m) : m; //分钟补0
+				let s = date.getSeconds();
+				s = s < 10 ? ('0' + s) : s; //秒补0
+				if (type == 'yymmdd') {
+					return y + '-' + MM + '-' + d;
+				} else if (type == 'hhmmss') {
+					return h + ':' + m + ':' + s;
+				} else {
+					return y + '-' + MM + '-' + d + ' ' + h + ':' + m + ':' + s;
+				}
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	page {
+		background-color: #F4F4F4;
+	}
+
+	.calendar {
+		width: 710rpx;
+		height: 590rpx;
+		background-color: #FFFFFF;
+		margin: 20rpx auto 10rpx;
+		border-radius: 8rpx;
+	}
+
+	.calendar_day {
+		display: flex;
+		width: 100%;
+		height: 120rpx;
+
+		.day_x {
+			display: flex;
+			// flex-flow: column nowrap;
+			flex-flow: nowrap;
+			justify-content: center;
+			align-items: center;
+			width: 20%;
+			height: 100%;
+			font-size: 30rpx;
+			color: #333333;
+		}
+	}
+
+	.calendar_time {
+		display: flex;
+		width: 88%;
+		height: 448rpx;
+		flex-flow: row wrap;
+		align-content: flex-start;
+		margin: 20rpx auto;
+		overflow-y: auto;
+
+		.time_x {
+			display: flex;
+			flex-flow: row;
+			justify-content: center;
+			align-items: center;
+			width: 138rpx;
+			height: 119rpx;
+			border-radius: 20rpx;
+			border: 1px solid #D1D1D1;
+			margin: 10rpx;
+			font-size: 30rpx;
+			color: #333333;
+		}
+
+		.time_x_sty {
+			background-color: #52c696;
+			border: none;
+			color: #fff !important;
+		}
+	}
+
+	.sub {
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		width: 710rpx;
+		height: 100rpx;
+		border-radius: 50rpx;
+		margin: 30rpx auto;
+		color: #FFFFFF;
+		font-size: 36rpx;
+		// background-color: #FE3B3C;
+	}
+
+	.top-wrap {
+
+		white-space: nowrap;
+		width: 700rpx;
+		// height: 100rpx;
+		padding: 20rpx 0;
+
+		.time-wrap {
+			margin: auto 50rpx;
+			display: inline-block;
+			text-align: center;
+			padding-bottom: 10rpx;
+
+			.time-xq {
+				font-size: 20rpx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #999999;
+			}
+
+			.time-val {
+				margin-top: 16rpx;
+				font-size: 27rpx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #333333;
+			}
+		}
+
+		.action {
+			border-bottom: 2px solid #52C696;
+
+			.time-xq {
+				color: #52C696;
+			}
+
+			.time-val {
+				color: #52C696;
+			}
+		}
+	}
+</style>

+ 133 - 0
components/mix-list-cell.vue

@@ -0,0 +1,133 @@
+<template>
+	<view class="content">
+		
+		<view class="mix-list-cell" :class="border" @click="eventClick" hover-class="cell-hover"  :hover-stay-time="50">
+			<image
+				v-if="icon"
+				class="cell-icon"
+				:style="[{
+					color: iconColor,
+				}]"
+				:src='icon'
+				mode='aspectFit'
+			></image>
+			<text class="cell-tit clamp">{{title}}</text>
+			<text v-if="tips" class="cell-tip">{{tips}}</text>
+			<text class="cell-more yticon"
+				:class="typeList[navigateType]"
+			></text>
+		</view>
+
+	</view>
+</template>
+ 
+<script>
+	/**
+	 *  简单封装了下, 应用范围比较狭窄,可以在此基础上进行扩展使用
+	 *  比如加入image, iconSize可控等
+	 */
+	export default {
+		data() {
+			return {
+				typeList: {
+					left: 'icon-zuo',
+					right: 'icon-you',
+					up: 'icon-shang',
+					down: 'icon-xia'
+				},
+			}
+		},
+		props: {
+			// 图标
+			icon: {
+				type: String,
+				default: ''
+			},
+			// 标题
+			title: {
+				type: String,
+				default: '标题'
+			},
+			// 右侧角标内容
+			tips: {
+				type: String,
+				default: ''
+			},
+			// 是否显示右侧角标
+			showType:{
+				type: Boolean,
+				default: true
+			},
+			// 右侧角标类型
+			navigateType: {
+				type: String,
+				default: 'right'
+			},
+			// 边框
+			border: {
+				type: String,
+				default: 'border-bottom-light'
+			},
+			// 点击时背景颜色
+			hoverClass: {
+				type: String,
+				default: 'cell-hover'
+			},
+			// 图标颜色
+			iconColor: {
+				type: String,
+				default: '#333'
+			}
+		},
+		methods: {
+			eventClick(){
+				this.$emit('eventClick');
+			}
+		},
+	}
+</script>
+
+<style lang='scss'>
+
+	.icon .mix-list-cell.b-b:after{
+		left: 30rpx;
+	}
+	.mix-list-cell{
+		display:flex;
+		align-items:baseline;
+		padding: 20rpx $page-row-spacing;
+		line-height:60rpx;
+		position:relative;
+		
+		&.cell-hover{
+			background:#fafafa;
+		}
+		&.b-b:after{
+			left: 30rpx;
+		}
+
+		.cell-icon{
+			align-self:center;
+			width:58rpx;
+			max-height:36rpx;
+			font-size:38rpx;
+			padding-right: 20rpx;
+		}
+		.cell-more{
+			align-self: center;
+			font-size:30rpx;
+			color:$font-color-base;
+			margin-left:$uni-spacing-row-sm;
+		}
+		.cell-tit{
+			flex: 1;
+			font-size: $font-base;
+			color: $font-color-dark;
+			margin-right:10rpx;
+		}
+		.cell-tip{
+			font-size: $font-sm+2rpx;
+			color: $font-color-light;
+		}
+	}
+</style>

File diff suppressed because it is too large
+ 6 - 0
components/mix-loading/mix-loading.vue


+ 231 - 0
components/pt-lottery/pt-lottery.vue

@@ -0,0 +1,231 @@
+<template>
+	<view class="pt-lottery">
+		<view class="pt-lottery-box">
+			<view :animation="animationData" class="pt-lottery-bg">
+				<image :src="lotteryBg" class='pt-lottery-bg-img'></image>
+				<view class="prize-list">
+					<view class="prize-item" v-for="(data,index) in showPrizeList" :key="index">
+						<view class="prize-item-info" :style="{'transform': 'rotate('+data.turn+')'}">
+							<view class="prize-name">{{data.prizeName}}</view>
+							<view v-if="data.prizeIcon" class="prize-icon">
+								<image :src="data.prizeIcon" mode="aspectFit"></image>
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+			<view @click="throttle(getLottery,gapTimes)" class="pt-lottery-btn">
+				<image :src="lotteryBtn"></image>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	/** 参数
+	 * lotteryBg 大转盘背景,不用纯色块,界面不好看
+	 * lotteryBtn 点击抽奖按钮
+	 * prizeList 奖品列表 [{prizeName,prizeIcon}]
+	 * times 抽奖次数
+	 * gapTimes 几秒钟内触发1次
+	 *	runTimes 转盘旋转时间与转动的速度
+	 */
+	let timer, flag;
+	export default {
+		props: {
+			lotteryBg: {
+				type: String,
+				default: ''
+			},
+			lotteryBtn: {
+				type: String,
+				default: ''
+			},
+			prizeList: {
+				type: Array,
+				default () {
+					return []
+				}
+			},
+			gapTimes: {
+				type: Number,
+				default: 2000
+			},
+			runTimes: {
+				type: Number,
+				default: 5000
+			}
+		},
+		data() {
+			return {
+				animationData: {},
+				runDegs: '',
+				is_lottery: false,
+				showPrizeList: [],
+				showTimes: ''
+			}
+		},
+		created() {
+			this.showTimes = this.times
+			var awardsConfig = this.prizeList,
+				len = awardsConfig.length,
+				awardsList = [],
+				turnNum = 1 / len
+			for (var i = 0; i < len; i++) {
+				awardsList.push({
+					turn: i * turnNum + 'turn',
+					prizeName: awardsConfig[i].prizeName,
+					prizeIcon: awardsConfig[i].prizeIcon,
+				});
+			}
+			this.showPrizeList = awardsList
+		},
+		methods: {
+			// 节流,防止多次点击,目前设定的是2秒中内只触发一次,按需修改
+			throttle(func, wait = 500, immediate = true) {
+				if (immediate) {
+					if (!flag) {
+						flag = true;
+						typeof func === 'function' && func();
+						timer = setTimeout(() => {
+							flag = false;
+						}, wait);
+					}
+				} else {
+					if (!flag) {
+						flag = true
+						timer = setTimeout(() => {
+							flag = false
+							typeof func === 'function' && func();
+						}, wait);
+					}
+				}
+			},
+			// 点击抽奖按钮
+			getLottery() {
+				this.$emit('start')
+			},
+			// 开始旋转
+			init(index) {
+				let _this = this
+				if (this.is_lottery) {
+					console.log('正在抽奖中,请等待本轮抽奖结束再进行下次抽奖')
+					return
+				}
+				this.is_lottery = true
+				if (this.showTimes) {
+					if (this.showTimes > 0) {
+						this.showTimes--
+					} else {
+						return uni.showToast({
+							icon: 'none',
+							title: '您未获得抽奖机会!'
+						})
+					}
+				}
+				var awardIndex = 0;
+				if (index) {
+					awardIndex = index
+				} else {
+					awardIndex = Math.ceil(Math.random() * this.showPrizeList.length - 1)
+				}
+				console.log(awardIndex, '123456');
+				this.runDegs = this.runDegs || 0
+				this.runDegs = this.runDegs + (360 - this.runDegs % 360) + (360 * this.showPrizeList.length - awardIndex *
+					(360 / this.showPrizeList.length))
+				var animationRun = uni.createAnimation({
+					duration: _this.runTimes,
+					timingFunction: 'ease'
+				})
+				animationRun.rotate(this.runDegs).step()
+				this.animationData = animationRun.export()
+				setTimeout(() => {
+					this.is_lottery = false
+					this.$emit('end')
+				}, _this.runTimes)
+			}
+		}
+	}
+</script>
+<style>
+	.pt-lottery-times {
+		text-align: center;
+		padding: 40rpx 0;
+	}
+
+	.pt-lottery-box {
+		position: relative;
+		width: 650rpx;
+		height: 650rpx;
+		margin: 0 auto;
+		border-radius: 50%;
+		overflow: hidden;
+	}
+
+	.pt-lottery-bg {
+		position: absolute;
+		width: 650rpx;
+		height: 650rpx;
+		left: 0;
+		top: 0;
+		z-index: 1;
+		background-clip: padding-box;
+	}
+
+	.pt-lottery-bg-img {
+		width: 650rpx;
+		height: 650rpx;
+	}
+
+	.prize-list {
+		position: absolute;
+		left: 0;
+		top: 0;
+		width: 650rpx;
+		height: 650rpx;
+		z-index: 9999;
+	}
+
+	.prize-item {
+		position: absolute;
+		left: 0;
+		top: 0;
+		width: 100%;
+		height: 100%;
+		font-weight: 600;
+		text-shadow: 0 1px 1px rgba(255, 255, 255, 0.6);
+		overflow: hidden;
+	}
+
+	.prize-item-info {
+		position: relative;
+		display: block;
+		margin: 0 auto;
+		text-align: center;
+		transform-origin: 50% 325rpx;
+		font-size: 24rpx;
+		padding-top: 95rpx;
+		color: #947600;
+	}
+
+	.prize-icon image {
+		width: 80rpx;
+		height: 80rpx;
+		margin-top: 10rpx;
+	}
+
+	.pt-lottery-btn {
+		position: absolute;
+		top: 50%;
+		left: 50%;
+		transform: translate(-50%, -50%);
+		z-index: 10;
+		width: 212rpx;
+		height: 228rpx;
+	}
+
+	.pt-lottery-btn image {
+		width: 212rpx;
+		height: 228rpx;
+	}
+</style>

+ 202 - 0
components/share.vue

@@ -0,0 +1,202 @@
+<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 :src="item.icon" mode=""></image>
+						<text>{{item.text}}</text>
+					</view>
+				</view>
+			</scroll-view>
+			<view class="bottom 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: .3s;
+		.bottom{
+			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: .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(.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;
+		image{
+			width: 80rpx;
+			height: 80rpx;
+			margin-bottom: 16rpx;
+		}
+		text{
+			font-size: $font-base;
+			color: $font-color-base;
+		}
+	}
+</style>

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

@@ -0,0 +1,218 @@
+<template>
+	<view class="calendar__wrap">
+		<view class="header">
+			<view class="current-date">{{ currentDate }}</view>
+		</view>
+		<view class="body">
+			<view class="weeks">
+				<view class="week__item" v-for="week in weeks" :key="week">{{ week }}</view>
+			</view>
+			<view class="day__list">
+				<view class="day__item" v-for="(item, index) in dateData" :key="index">
+					<view class="checked-box" :class="[checksClass]" v-if="item === 'checked'">
+						<text class="checked iconfont iconfavor" v-if="!checksIcon"></text>
+						<image v-else :src="checksIcon" mode="aspectFit"></image>
+						<view class="check_text" v-if="checkTextShow">{{ 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 [];
+			}
+		},
+		// 选中物品的样式类
+		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 {
+	background-color: #fff;
+	color: $uni-text-color;
+	.header {
+		padding: 0 24rpx;
+		.current-date {
+			text-align: center;
+			font-size: $font-lg + 2rpx;
+			// border-bottom: 2rpx solid #eee;
+			padding: 32rpx 0;
+		}
+	}
+	.body {
+		.weeks {
+			display: flex;
+			font-size: $font-lg;
+			padding: 10rpx 0;
+			background-color: #f4f7ff;
+			.week__item {
+				flex: 1;
+				text-align: center;
+			}
+		}
+		.day__list {
+			display: flex;
+			flex-wrap: wrap;
+			.day__item {
+				display: flex;
+				justify-content: center;
+				width: 14.285%;
+				text-align: center;
+				padding: 30rpx 0;
+				font-size: 34rpx;
+				color: $font-color-light;
+				.checked-box,
+				.current-box {
+					display: flex;
+					align-items: center;
+					justify-content: center;
+					border-radius: 100%;
+					box-sizing: border-box;
+					position: relative;
+				}
+				image,
+				.checked-box,
+				.current-box,
+				.check_text {
+					width: 56rpx;
+					height: 56rpx;
+					line-height: 56rpx;
+				}
+				image,
+				.check_text {
+					position: absolute;
+					top: 0;
+					left: 0;
+				}
+				.checked {
+					font-size: 40rpx;
+					background-color: #3f9dff;
+					color: #fff;
+				}
+				.current {
+					padding: 12rpx;
+					background-color: $background-color;
+					color: #fff;
+					font-size: 28rpx;
+				}
+			}
+		}
+	}
+}
+</style>

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

@@ -0,0 +1,1207 @@
+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

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

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

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

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

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

@@ -0,0 +1,193 @@
+<template>
+	<view class="uni-countdown">
+		<text v-if="showDay" :style="{ borderColor: borderColor, color: color, backgroundColor: backgroundColor }"
+			class="uni-countdown__number">{{ d }}</text>
+		<text v-if="showDay" :style="{ color: splitorColor }" class="uni-countdown__splitor">天</text>
+		<text :style="{ borderColor: borderColor, color: color, backgroundColor: backgroundColor }"
+			class="uni-countdown__number">{{ h }}</text>
+		<text :style="{ color: splitorColor }" class="uni-countdown__splitor">{{ showColon ? ':' : '时' }}</text>
+		<text :style="{ borderColor: borderColor, color: color, backgroundColor: backgroundColor }"
+			class="uni-countdown__number">{{ i }}</text>
+		<text :style="{ color: splitorColor }" class="uni-countdown__splitor">{{ showColon ? ':' : '分' }}</text>
+		<text :style="{ borderColor: borderColor, color: color, backgroundColor: backgroundColor }"
+			class="uni-countdown__number">{{ s }}</text>
+		<text v-if="!showColon" :style="{ color: splitorColor }" class="uni-countdown__splitor">秒</text>
+	</view>
+</template>
+<script>
+	export default {
+		name: 'UniCountdown',
+		props: {
+			showDay: {
+				type: Boolean,
+				default: true
+			},
+			showColon: {
+				type: Boolean,
+				default: true
+			},
+			backgroundColor: {
+				type: String,
+				default: '#FFFFFF'
+			},
+			borderColor: {
+				type: String,
+				default: '#000000'
+			},
+			color: {
+				type: String,
+				default: '#000000'
+			},
+			splitorColor: {
+				type: String,
+				default: '#000000'
+			},
+			day: {
+				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 * 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>

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

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

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


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

@@ -0,0 +1,230 @@
+<template>
+	<!-- #ifdef APP-NVUE -->
+	<cell>
+	<!-- #endif -->
+	<view :class="disabled ? 'uni-list-item--disabled' : ''" :hover-class="disabled || showSwitch ? '' : 'uni-list-item--hover'"
+	 class="uni-list-item" @click="onClick">
+		<view class="uni-list-item__container" :class="{'uni-list-item--first':isFirstChild}">
+			<view v-if="thumb" class="uni-list-item__icon">
+				<image :src="thumb" mode="aspectFit" class="uni-list-item__icon-img" />
+			</view>
+			<view v-else-if="showExtraIcon" class="uni-list-item__icon">
+				<uni-icons :color="extraIcon.color" :size="extraIcon.size" :type="extraIcon.type" class="uni-icon-wrapper" />
+			</view>
+			<view class="uni-list-item__content">
+				<slot></slot>
+				<text class="uni-list-item__content-title">{{ title }}</text>
+				<text v-if="note" class="uni-list-item__content-note">{{ note }}</text>
+			</view>
+			<view class="uni-list-item__slot">
+				<slot name="right" ></slot>
+			</view>
+			<view v-if="showBadge || showArrow || showSwitch" class="uni-list-item__extra">
+				<uni-badge v-if="showBadge" :type="badgeType" :text="badgeText" />
+				<switch 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>

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

@@ -0,0 +1,361 @@
+<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
+	export default {
+		name: 'UniNoticeBar',
+		components: {
+			uniIcons
+		},
+		props: {
+			text: {
+				type: String,
+				default: ''
+			},
+			moreText: {
+				type: String,
+				default: ''
+			},
+			backgroundColor: {
+				type: String,
+				default: '#fffbe8'
+			},
+			speed: {
+				// 默认1s滚动100px
+				type: [String, Number],
+				default: 100
+			},
+			color: {
+				type: String,
+				default: '#de8c17'
+			},
+			moreColor: {
+				type: String,
+				default: '#999999'
+			},
+			single: {
+				// 是否单行
+				type: [String, Boolean],
+				default: false
+			},
+			scrollable: {
+				// 是否滚动,添加后控制单行效果取消
+				type: [String, Boolean],
+				default: false
+			},
+			showIcon: {
+				// 是否显示左侧icon
+				type: [String, Boolean],
+				default: false
+			},
+			showGetMore: {
+				// 是否显示右侧查看更多
+				type: [String, Boolean],
+				default: false
+			},
+			showClose: {
+				// 是否显示左侧关闭按钮
+				type: [String, Boolean],
+				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()
+							.in(this)
+							.select(`#${this.elId}`)
+							.boundingClientRect()
+							.exec(ret => {
+								this.textWidth = ret[0].width
+								resolve()
+							})
+					})
+					let boxQuery = new Promise((resolve, reject) => {
+						uni.createSelectorQuery()
+							.in(this)
+							.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;
+	}
+
+	.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: inline-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 */
+		display: inline-block;
+		white-space: nowrap;
+		padding-left: 100%;
+		animation: notice 10s 0s linear infinite both;
+		animation-play-state: paused;
+		/* #endif */
+	}
+
+	.uni-noticebar__more {
+		/* #ifndef APP-NVUE */
+		display: inline-flex;
+		/* #endif */
+		flex-direction: row;
+		flex-wrap: nowrap;
+		align-items: center;
+		padding-left: 5px;
+	}
+
+	.uni-noticebar__more-text {
+		font-size: 14px;
+	}
+
+	@keyframes notice {
+		100% {
+			transform: translate3d(-100%, 0, 0);
+		}
+	}
+</style>

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

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

+ 22 - 0
components/uni-popup/message.js

@@ -0,0 +1,22 @@
+export default {
+	created() {
+		if (this.type === 'message') {
+			// 不显示遮罩
+			this.maskShow = false 
+			// 获取子组件对象
+			this.childrenMsg = null
+		}
+	},
+	methods: {
+		customOpen() {
+			if (this.childrenMsg) {
+				this.childrenMsg.open()
+			}
+		},
+		customClose() {
+			if (this.childrenMsg) {
+				this.childrenMsg.close()
+			}
+		}
+	}
+}

+ 25 - 0
components/uni-popup/popup.js

@@ -0,0 +1,25 @@
+import message from './message.js';
+// 定义 type 类型:弹出类型:top/bottom/center
+const config = {
+	// 顶部弹出
+	top:'top',
+	// 底部弹出
+	bottom:'bottom',
+	// 居中弹出
+	center:'center',
+	// 消息提示
+	message:'top',
+	// 对话框
+	dialog:'center',
+	// 分享
+	share:'bottom',
+}
+
+export default {
+	data(){
+		return {
+			config:config
+		}
+	},
+	mixins: [message],
+}

+ 266 - 0
components/uni-popup/uni-popup-dialog.vue

@@ -0,0 +1,266 @@
+<template>
+	<view class="uni-popup-dialog">
+		<view class="uni-dialog-title">
+			<text class="uni-dialog-title-text" :class="['uni-popup__'+dialogType]">{{title}}</text>
+		</view>
+		<view class="uni-dialog-content">
+			<text class="uni-dialog-content-text" v-if="mode === 'base'">{{content}}</text>
+			<input v-else class="uni-dialog-input" v-model="val" type="text" :placeholder="placeholder" :focus="focus">
+		</view>
+		<view class="uni-dialog-picker" v-if="isSkm">
+			<picker @change="bindPickerChange" :value="index" :range="array">
+				<view class="picker-val">支付方式:{{array[index]}}</view>
+			</picker>
+		</view>
+		<view class="uni-dialog-button-group">
+			<view class="uni-dialog-button" @click="close">
+				<text class="uni-dialog-button-text">取消</text>
+			</view>
+			<view class="uni-dialog-button uni-border-left" @click="onOk">
+				<text class="uni-dialog-button-text uni-button-color">确定</text>
+			</view>
+		</view>
+
+	</view>
+</template>
+
+<script>
+	/**
+	 * PopUp 弹出层-对话框样式
+	 * @description 弹出层-对话框样式
+	 * @tutorial https://ext.dcloud.net.cn/plugin?id=329
+	 * @property {String} value input 模式下的默认值
+	 * @property {String} placeholder input 模式下输入提示
+	 * @property {String} type = [success|warning|info|error] 主题样式
+	 *  @value success 成功
+	 * 	@value warning 提示
+	 * 	@value info 消息
+	 * 	@value error 错误
+	 * @property {String} mode = [base|input] 模式、
+	 * 	@value base 基础对话框
+	 * 	@value input 可输入对话框
+	 * @property {String} content 对话框内容
+	 * @property {Boolean} beforeClose 是否拦截取消事件
+	 * @event {Function} confirm 点击确认按钮触发
+	 * @event {Function} close 点击取消按钮触发
+	 */
+
+	export default {
+		name: "uniPopupDialog",
+		props: {
+			value: {
+				type: [String, Number],
+				default: ''
+			},
+			placeholder: {
+				type: [String, Number],
+				default: '请输入内容'
+			},
+			/**
+			 * 对话框主题 success/warning/info/error	  默认 success
+			 */
+			type: {
+				type: String,
+				default: 'error'
+			},
+			/**
+			 * 对话框模式 base/input
+			 */
+			mode: {
+				type: String,
+				default: 'base'
+			},
+			/**
+			 * 对话框标题
+			 */
+			title: {
+				type: String,
+				default: '提示'
+			},
+			/**
+			 * 对话框内容
+			 */
+			content: {
+				type: String,
+				default: ''
+			},
+			/**
+			 * 拦截取消事件 ,如果拦截取消事件,必须监听close事件,执行 done()
+			 */
+			beforeClose: {
+				type: Boolean,
+				default: false
+			},
+			isSkm: {
+				type: Boolean,
+				default: false
+			}
+		},
+		data() {
+			return {
+				dialogType: 'error',
+				focus: false,
+				val: "",
+				array: ['余额','消费券','积分'],
+				index:0
+			}
+		},
+		inject: ['popup'],
+		watch: {
+			type(val) {
+				this.dialogType = val
+			},
+			mode(val) {
+				if (val === 'input') {
+					this.dialogType = 'info'
+				}
+			},
+			value(val) {
+				this.val = val
+			},
+		},
+		created() {
+			// 对话框遮罩不可点击
+			this.popup.mkclick = false
+			if (this.mode === 'input') {
+				this.dialogType = 'info'
+				this.val = this.value
+			} else {
+				this.dialogType = this.type
+			}
+		},
+		mounted() {
+			this.focus = true
+		},
+		methods: {
+			/**
+			 * 点击确认按钮
+			 */
+			onOk() {
+				this.$emit('confirm', () => {
+					this.popup.close()
+					if (this.mode === 'input') this.val = this.value
+				}, this.mode === 'input' ? this.val : '')
+			},
+			/**
+			 * 点击取消按钮
+			 */
+			close() {
+				if (this.beforeClose) {
+					this.$emit('close', () => {
+						this.popup.close()
+					})
+					return
+				}
+				this.popup.close()
+			},
+			// 改变支付方式
+			bindPickerChange(e) {
+				this.index = e.target.value
+				this.$emit('changeShowPayType',this.index)
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.uni-popup-dialog {
+		width: 300px;
+		border-radius: 15px;
+		background-color: #fff;
+	}
+
+	.uni-dialog-title {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		flex-direction: row;
+		justify-content: center;
+		padding-top: 15px;
+		padding-bottom: 5px;
+	}
+
+	.uni-dialog-title-text {
+		font-size: 16px;
+		font-weight: 500;
+	}
+
+	.uni-dialog-content {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		flex-direction: row;
+		justify-content: center;
+		align-items: center;
+		padding: 5px 15px 15px 15px;
+	}
+
+	.uni-dialog-content-text {
+		font-size: 14px;
+		color: #6e6e6e;
+	}
+
+	.uni-dialog-button-group {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		flex-direction: row;
+		border-top-color: #f5f5f5;
+		border-top-style: solid;
+		border-top-width: 1px;
+	}
+
+	.uni-dialog-button {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+
+		flex: 1;
+		flex-direction: row;
+		justify-content: center;
+		align-items: center;
+		height: 45px;
+	}
+
+	.uni-border-left {
+		border-left-color: #f0f0f0;
+		border-left-style: solid;
+		border-left-width: 1px;
+	}
+
+	.uni-dialog-button-text {
+		font-size: 14px;
+	}
+
+	.uni-button-color {
+		color: $uni-color-primary;
+	}
+
+	.uni-dialog-input {
+		flex: 1;
+		font-size: 14px;
+	}
+
+	.uni-popup__success {
+		color: $uni-color-success;
+	}
+
+	.uni-popup__warn {
+		color: $uni-color-warning;
+	}
+
+	.uni-popup__error {
+		color: $uni-color-error;
+	}
+
+	.uni-popup__info {
+		color: #909399;
+	}
+	.picker-val {
+		padding: 0rpx 0 30rpx 30rpx;
+		// text-align: center;
+		font-size: 14px;
+		width: 100%;
+		// background-color: red;
+	}
+</style>

+ 116 - 0
components/uni-popup/uni-popup-message.vue

@@ -0,0 +1,116 @@
+<template>
+	<view class="uni-popup-message" :class="'uni-popup__'+[type]">
+		<text class="uni-popup-message-text" :class="'uni-popup__'+[type]+'-text'">{{message}}</text>
+	</view>
+</template>
+
+<script>
+	
+	/**
+	 * PopUp 弹出层-消息提示
+	 * @description 弹出层-消息提示
+	 * @tutorial https://ext.dcloud.net.cn/plugin?id=329
+	 * @property {String} type = [success|warning|info|error] 主题样式
+	 *  @value success 成功
+	 * 	@value warning 提示
+	 * 	@value info 消息
+	 * 	@value error 错误
+	 * @property {String} message 消息提示文字
+	 * @property {String} duration 显示时间,设置为 0 则不会自动关闭
+	 */
+	
+	export default {
+		name: 'UniPopupMessage',
+		props: {
+			/**
+			 * 主题 success/warning/info/error	  默认 success
+			 */
+			type: {
+				type: String,
+				default: 'success'
+			},
+			/**
+			 * 消息文字
+			 */
+			message: {
+				type: String,
+				default: ''
+			},
+			/**
+			 * 显示时间,设置为 0 则不会自动关闭
+			 */
+			duration: {
+				type: Number,
+				default: 3000
+			}
+		},
+		inject: ['popup'],
+		data() {
+			return {}
+		},
+		created() {
+			this.popup.childrenMsg = this
+		},
+		methods: {
+			open() {
+				if (this.duration === 0) return
+				clearTimeout(this.popuptimer)
+				this.popuptimer = setTimeout(() => {
+					this.popup.close()
+				}, this.duration)
+			},
+			close() {
+				clearTimeout(this.popuptimer)
+			}
+		}
+	}
+</script>
+<style lang="scss" scoped>
+	.uni-popup-message {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		flex-direction: row;
+		background-color: #e1f3d8;
+		padding: 10px 15px;
+		border-color: #eee;
+		border-style: solid;
+		border-width: 1px;
+	}
+	.uni-popup-message-text {
+		font-size: 14px;
+		padding: 0;
+	}
+
+	.uni-popup__success {
+		background-color: #e1f3d8;
+	}
+
+	.uni-popup__success-text {
+		color: #67C23A;
+	}
+
+	.uni-popup__warn {
+		background-color: #faecd8;
+	}
+
+	.uni-popup__warn-text {
+		color: #E6A23C;
+	}
+
+	.uni-popup__error {
+		background-color: #fde2e2;
+	}
+
+	.uni-popup__error-text {
+		color: #F56C6C;
+	}
+
+	.uni-popup__info {
+		background-color: #F2F6FC;
+	}
+
+	.uni-popup__info-text {
+		color: #909399;
+	}
+</style>

+ 165 - 0
components/uni-popup/uni-popup-share.vue

@@ -0,0 +1,165 @@
+<template>
+	<view class="uni-popup-share">
+		<view class="uni-share-title"><text class="uni-share-title-text">{{title}}</text></view>
+		<view class="uni-share-content">
+			<view class="uni-share-content-box">
+				<view class="uni-share-content-item" v-for="(item,index) in bottomData" :key="index" @click.stop="select(item,index)">
+					<image class="uni-share-image" :src="item.icon" mode="aspectFill"></image>
+					<text class="uni-share-text">{{item.text}}</text>
+				</view>
+
+			</view>
+		</view>
+		<view class="uni-share-button-box">
+			<button class="uni-share-button" @click="close">取消</button>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		name: 'UniPopupShare',
+		props: {
+			title: {
+				type: String,
+				default: '分享到'
+			}
+		},
+		inject: ['popup'],
+		data() {
+			return {
+				bottomData: [{
+						text: '微信',
+						icon: 'https://img-cdn-qiniu.dcloud.net.cn/uni-ui/grid-2.png',
+						name: 'wx'
+					},
+					{
+						text: '支付宝',
+						icon: 'https://img-cdn-qiniu.dcloud.net.cn/uni-ui/grid-8.png',
+						name: 'wx'
+					},
+					{
+						text: 'QQ',
+						icon: 'https://img-cdn-qiniu.dcloud.net.cn/uni-ui/gird-3.png',
+						name: 'qq'
+					},
+					{
+						text: '新浪',
+						icon: 'https://img-cdn-qiniu.dcloud.net.cn/uni-ui/grid-1.png',
+						name: 'sina'
+					},
+					{
+						text: '百度',
+						icon: 'https://img-cdn-qiniu.dcloud.net.cn/uni-ui/grid-7.png',
+						name: 'copy'
+					},
+					{
+						text: '其他',
+						icon: 'https://img-cdn-qiniu.dcloud.net.cn/uni-ui/grid-5.png',
+						name: 'more'
+					}
+				]
+			}
+		},
+		created() {},
+		methods: {
+			/**
+			 * 选择内容
+			 */
+			select(item, index) {
+				this.$emit('select', {
+					item,
+					index
+				}, () => {
+					this.popup.close()
+				})
+			},
+			/**
+			 * 关闭窗口
+			 */
+			close() {
+				this.popup.close()
+			}
+		}
+	}
+</script>
+<style lang="scss" scoped>
+	.uni-popup-share {
+		background-color: #fff;
+	}
+	.uni-share-title {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		flex-direction: row;
+		align-items: center;
+		justify-content: center;
+		height: 40px;
+	}
+	.uni-share-title-text {
+		font-size: 14px;
+		color: #666;
+	}
+	.uni-share-content {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		flex-direction: row;
+		justify-content: center;
+		padding-top: 10px;
+	}
+	
+	.uni-share-content-box {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		flex-direction: row;
+		flex-wrap: wrap;
+		width: 360px;
+	}
+	
+	.uni-share-content-item {
+		width: 90px;
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		flex-direction: column;
+		justify-content: center;
+		padding: 10px 0;
+		align-items: center;
+	}
+	
+	.uni-share-content-item:active {
+		background-color: #f5f5f5;
+	}
+	
+	.uni-share-image {
+		width: 30px;
+		height: 30px;
+	}
+	
+	.uni-share-text {
+		margin-top: 10px;
+		font-size: 14px;
+		color: #3B4144;
+	}
+	
+	.uni-share-button-box {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		flex-direction: row;
+		padding: 10px 15px;
+	}
+	
+	.uni-share-button {
+		flex: 1;
+		border-radius: 50px;
+		color: #666;
+		font-size: 16px;
+	}
+	
+	.uni-share-button::after {
+		border-radius: 50px;
+	}
+</style>

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

@@ -0,0 +1,294 @@
+<template>
+	<view v-if="showPopup" class="uni-popup" :class="[popupstyle]" @touchmove.stop.prevent="clear">
+		<uni-transition v-if="maskShow" :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'
+	import popup from './popup.js'
+	/**
+	 * PopUp 弹出层
+	 * @description 弹出层组件,为了解决遮罩弹层的问题
+	 * @tutorial https://ext.dcloud.net.cn/plugin?id=329
+	 * @property {String} type = [top|center|bottom] 弹出方式
+	 * 	@value top 顶部弹出
+	 * 	@value center 中间弹出
+	 * 	@value bottom 底部弹出
+	 * 	@value message 消息提示
+	 * 	@value dialog 对话框
+	 * 	@value share 底部分享示例
+	 * @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:全屏弹出层
+			// message: 消息提示 ; dialog : 对话框
+			type: {
+				type: String,
+				default: 'center'
+			},
+			// maskClick
+			maskClick: {
+				type: Boolean,
+				default: true
+			}
+		},
+		provide() {
+			return {
+				popup: this
+			}
+		},
+		mixins: [popup],
+		watch: {
+			/**
+			 * 监听type类型
+			 */
+			type: {
+				handler: function(newVal) {
+					this[this.config[newVal]]()
+				},
+				immediate: true
+			},
+			/**
+			 * 监听遮罩是否可点击
+			 * @param {Object} val
+			 */
+			maskClick(val) {
+				this.mkclick = val
+			}
+		},
+		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,
+				},
+				maskShow: true,
+				mkclick: true,
+				popupstyle: 'top'
+			}
+		},
+		created() {
+			this.mkclick = this.maskClick
+			if (this.animation) {
+				this.duration = 300
+			} else {
+				this.duration = 0
+			}
+		},
+		methods: {
+			clear(e) {
+				// TODO nvue 取消冒泡
+				e.stopPropagation()
+			},
+			open() {
+				this.showPopup = true
+				this.$nextTick(() => {
+					new Promise(resolve => {
+						clearTimeout(this.timer)
+						this.timer = setTimeout(() => {
+							this.showTrans = true
+							// fixed by mehaotian 兼容 app 端
+							this.$nextTick(() => {
+								resolve();
+							})
+						}, 50);
+					}).then(res => {
+						// 自定义打开事件
+						clearTimeout(this.msgtimer)
+						this.msgtimer = setTimeout(() => {
+							this.customOpen && this.customOpen()
+						}, 100)
+						this.$emit('change', {
+							show: true,
+							type: this.type
+						})
+					})
+				})
+			},
+			close(type) {
+				this.showTrans = false
+				this.$nextTick(() => {
+					this.$emit('change', {
+						show: false,
+						type: this.type
+					})
+					clearTimeout(this.timer)
+					// 自定义关闭事件
+					this.customOpen && this.customClose()
+					this.timer = setTimeout(() => {
+						this.showPopup = false
+					}, 300)
+				})
+			},
+			onTap() {
+				if (!this.mkclick) return
+				this.close()
+			},
+			/**
+			 * 顶部弹出样式处理
+			 */
+			top() {
+				this.popupstyle = 'top'
+				this.ani = ['slide-top']
+				this.transClass = {
+					'position': 'fixed',
+					'left': 0,
+					'right': 0,
+				}
+			},
+			/**
+			 * 底部弹出样式处理
+			 */
+			bottom() {
+				this.popupstyle = 'bottom'
+				this.ani = ['slide-bottom']
+				this.transClass = {
+					'position': 'fixed',
+					'left': 0,
+					'right': 0,
+					'bottom': 0
+				}
+			},
+			/**
+			 * 中间弹出样式处理
+			 */
+			center() {
+				this.popupstyle = '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'
+				}
+			}
+		}
+	}
+</script>
+<style lang="scss" scoped>
+	.uni-popup {
+		position: fixed;
+		/* #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 {
+		/* #ifdef H5 */
+		top: var(--window-top);
+		/* #endif */
+		/* #ifndef H5 */
+		top: 0;
+		/* #endif */
+	}
+
+	.bottom {
+		bottom: 0;
+	}
+
+	.uni-popup__wrapper-box {
+		/* #ifndef APP-NVUE */
+		display: block;
+		/* #endif */
+		position: relative;
+		/* iphonex 等安全区设置,底部安全区适配 */
+		/* #ifndef APP-NVUE */
+		padding-bottom: constant(safe-area-inset-bottom);
+		padding-bottom: env(safe-area-inset-bottom);
+		/* #endif */
+	}
+
+	.content-ani {
+		// transition: transform 0.3s;
+		transition-property: transform, opacity;
+		transition-duration: 0.2s;
+	}
+
+
+	.uni-top-content {
+		transform: translateY(0);
+	}
+
+	.uni-bottom-content {
+		transform: translateY(0);
+	}
+
+	.uni-center-content {
+		transform: scale(1);
+		opacity: 1;
+	}
+</style>

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

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

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

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

+ 226 - 0
components/upload-images.vue

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

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

@@ -0,0 +1,13310 @@
+export default [{
+		value: 1,
+		label: '北京',
+		children: [{
+				value: 1,
+				label: '东城区'
+			},
+			{
+				value: 2,
+				label: '西城区'
+			},
+			{
+				value: 3,
+				label: '崇文区'
+			},
+			{
+				value: 4,
+				label: '宣武区'
+			},
+			{
+				value: 5,
+				label: '朝阳区'
+			},
+			{
+				value: 6,
+				label: '丰台区'
+			},
+			{
+				value: 7,
+				label: '石景山区'
+			},
+			{
+				value: 8,
+				label: '海淀区'
+			},
+			{
+				value: 9,
+				label: '门头沟区'
+			},
+			{
+				value: 10,
+				label: '房山区'
+			},
+			{
+				value: 11,
+				label: '通州区'
+			},
+			{
+				value: 12,
+				label: '顺义区'
+			},
+			{
+				value: 13,
+				label: '昌平区'
+			},
+			{
+				value: 14,
+				label: '大兴区'
+			},
+			{
+				value: 15,
+				label: '怀柔区'
+			},
+			{
+				value: 16,
+				label: '平谷区'
+			},
+			{
+				value: 17,
+				label: '密云县'
+			},
+			{
+				value: 18,
+				label: '延庆县'
+			}
+		]
+	},
+	{
+		value: 2,
+		label: '天津',
+		children: [{
+				value: 19,
+				label: '和平区'
+			},
+			{
+				value: 20,
+				label: '河东区'
+			},
+			{
+				value: 21,
+				label: '河西区'
+			},
+			{
+				value: 22,
+				label: '南开区'
+			},
+			{
+				value: 23,
+				label: '河北区'
+			},
+			{
+				value: 24,
+				label: '红桥区'
+			},
+			{
+				value: 25,
+				label: '塘沽区'
+			},
+			{
+				value: 26,
+				label: '汉沽区'
+			},
+			{
+				value: 27,
+				label: '大港区'
+			},
+			{
+				value: 28,
+				label: '东丽区'
+			},
+			{
+				value: 29,
+				label: '西青区'
+			},
+			{
+				value: 30,
+				label: '津南区'
+			},
+			{
+				value: 31,
+				label: '北辰区'
+			},
+			{
+				value: 32,
+				label: '武清区'
+			},
+			{
+				value: 33,
+				label: '宝坻区'
+			},
+			{
+				value: 34,
+				label: '宁河县'
+			},
+			{
+				value: 35,
+				label: '静海县'
+			},
+			{
+				value: 36,
+				label: '蓟县'
+			}
+		]
+	},
+	{
+		value: 3,
+		label: '河北',
+		children: [{
+				value: 3,
+				label: '石家庄',
+				children: [{
+						value: 37,
+						label: '长安区'
+					},
+					{
+						value: 38,
+						label: '桥东区'
+					},
+					{
+						value: 39,
+						label: '桥西区'
+					},
+					{
+						value: 40,
+						label: '新华区'
+					},
+					{
+						value: 41,
+						label: '井陉矿区'
+					},
+					{
+						value: 42,
+						label: '裕华区'
+					},
+					{
+						value: 43,
+						label: '井陉县'
+					},
+					{
+						value: 44,
+						label: '正定县'
+					},
+					{
+						value: 45,
+						label: '栾城县'
+					},
+					{
+						value: 46,
+						label: '行唐县'
+					},
+					{
+						value: 47,
+						label: '灵寿县'
+					},
+					{
+						value: 48,
+						label: '高邑县'
+					},
+					{
+						value: 49,
+						label: '深泽县'
+					},
+					{
+						value: 50,
+						label: '赞皇县'
+					},
+					{
+						value: 51,
+						label: '无极县'
+					},
+					{
+						value: 52,
+						label: '平山县'
+					},
+					{
+						value: 53,
+						label: '元氏县'
+					},
+					{
+						value: 54,
+						label: '赵县'
+					},
+					{
+						value: 55,
+						label: '辛集'
+					},
+					{
+						value: 56,
+						label: '藁城'
+					},
+					{
+						value: 57,
+						label: '晋州'
+					},
+					{
+						value: 58,
+						label: '新乐'
+					},
+					{
+						value: 59,
+						label: '鹿泉'
+					}
+				]
+			},
+			{
+				value: 4,
+				label: '唐山',
+				children: [{
+						value: 60,
+						label: '路南区'
+					},
+					{
+						value: 61,
+						label: '路北区'
+					},
+					{
+						value: 62,
+						label: '古冶区'
+					},
+					{
+						value: 63,
+						label: '开平区'
+					},
+					{
+						value: 64,
+						label: '丰南区'
+					},
+					{
+						value: 65,
+						label: '丰润区'
+					},
+					{
+						value: 66,
+						label: '滦县'
+					},
+					{
+						value: 67,
+						label: '滦南县'
+					},
+					{
+						value: 68,
+						label: '乐亭县'
+					},
+					{
+						value: 69,
+						label: '迁西县'
+					},
+					{
+						value: 70,
+						label: '玉田县'
+					},
+					{
+						value: 71,
+						label: '唐海县'
+					},
+					{
+						value: 72,
+						label: '遵化'
+					},
+					{
+						value: 73,
+						label: '迁安'
+					}
+				]
+			},
+			{
+				value: 5,
+				label: '秦皇岛',
+				children: [{
+						value: 74,
+						label: '海港区'
+					},
+					{
+						value: 75,
+						label: '山海关区'
+					},
+					{
+						value: 76,
+						label: '北戴河区'
+					},
+					{
+						value: 77,
+						label: '青龙满族自治县'
+					},
+					{
+						value: 78,
+						label: '昌黎县'
+					},
+					{
+						value: 79,
+						label: '抚宁县'
+					},
+					{
+						value: 80,
+						label: '卢龙县'
+					}
+				]
+			},
+			{
+				value: 6,
+				label: '邯郸',
+				children: [{
+						value: 81,
+						label: '邯山区'
+					},
+					{
+						value: 82,
+						label: '丛台区'
+					},
+					{
+						value: 83,
+						label: '复兴区'
+					},
+					{
+						value: 84,
+						label: '峰峰矿区'
+					},
+					{
+						value: 85,
+						label: '邯郸县'
+					},
+					{
+						value: 86,
+						label: '临漳县'
+					},
+					{
+						value: 87,
+						label: '成安县'
+					},
+					{
+						value: 88,
+						label: '大名县'
+					},
+					{
+						value: 89,
+						label: '涉县'
+					},
+					{
+						value: 90,
+						label: '磁县'
+					},
+					{
+						value: 91,
+						label: '肥乡县'
+					},
+					{
+						value: 92,
+						label: '永年县'
+					},
+					{
+						value: 93,
+						label: '邱县'
+					},
+					{
+						value: 94,
+						label: '鸡泽县'
+					},
+					{
+						value: 95,
+						label: '广平县'
+					},
+					{
+						value: 96,
+						label: '馆陶县'
+					},
+					{
+						value: 97,
+						label: '魏县'
+					},
+					{
+						value: 98,
+						label: '曲周县'
+					},
+					{
+						value: 99,
+						label: '武安'
+					}
+				]
+			},
+			{
+				value: 7,
+				label: '邢台',
+				children: [{
+						value: 100,
+						label: '桥东区'
+					},
+					{
+						value: 101,
+						label: '桥西区'
+					},
+					{
+						value: 102,
+						label: '邢台县'
+					},
+					{
+						value: 103,
+						label: '临城县'
+					},
+					{
+						value: 104,
+						label: '内丘县'
+					},
+					{
+						value: 105,
+						label: '柏乡县'
+					},
+					{
+						value: 106,
+						label: '隆尧县'
+					},
+					{
+						value: 107,
+						label: '任县'
+					},
+					{
+						value: 108,
+						label: '南和县'
+					},
+					{
+						value: 109,
+						label: '宁晋县'
+					},
+					{
+						value: 110,
+						label: '巨鹿县'
+					},
+					{
+						value: 111,
+						label: '新河县'
+					},
+					{
+						value: 112,
+						label: '广宗县'
+					},
+					{
+						value: 113,
+						label: '平乡县'
+					},
+					{
+						value: 114,
+						label: '威县'
+					},
+					{
+						value: 115,
+						label: '清河县'
+					},
+					{
+						value: 116,
+						label: '临西县'
+					},
+					{
+						value: 117,
+						label: '南宫'
+					},
+					{
+						value: 118,
+						label: '沙河'
+					}
+				]
+			},
+			{
+				value: 8,
+				label: '保定',
+				children: [{
+						value: 119,
+						label: '新区'
+					},
+					{
+						value: 120,
+						label: '北区'
+					},
+					{
+						value: 121,
+						label: '南区'
+					},
+					{
+						value: 122,
+						label: '满城县'
+					},
+					{
+						value: 123,
+						label: '清苑县'
+					},
+					{
+						value: 124,
+						label: '涞水县'
+					},
+					{
+						value: 125,
+						label: '阜平县'
+					},
+					{
+						value: 126,
+						label: '徐水县'
+					},
+					{
+						value: 127,
+						label: '定兴县'
+					},
+					{
+						value: 128,
+						label: '唐县'
+					},
+					{
+						value: 129,
+						label: '高阳县'
+					},
+					{
+						value: 130,
+						label: '容城县'
+					},
+					{
+						value: 131,
+						label: '涞源县'
+					},
+					{
+						value: 132,
+						label: '望都县'
+					},
+					{
+						value: 133,
+						label: '安新县'
+					},
+					{
+						value: 134,
+						label: '易县'
+					},
+					{
+						value: 135,
+						label: '曲阳县'
+					},
+					{
+						value: 136,
+						label: '蠡县'
+					},
+					{
+						value: 137,
+						label: '顺平县'
+					},
+					{
+						value: 138,
+						label: '博野县'
+					},
+					{
+						value: 139,
+						label: '雄县'
+					},
+					{
+						value: 140,
+						label: '涿州'
+					},
+					{
+						value: 141,
+						label: '定州'
+					},
+					{
+						value: 142,
+						label: '安国'
+					},
+					{
+						value: 143,
+						label: '高碑店'
+					}
+				]
+			},
+			{
+				value: 9,
+				label: '张家口',
+				children: [{
+						value: 144,
+						label: '桥东区'
+					},
+					{
+						value: 145,
+						label: '桥西区'
+					},
+					{
+						value: 146,
+						label: '宣化区'
+					},
+					{
+						value: 147,
+						label: '下花园区'
+					},
+					{
+						value: 148,
+						label: '宣化县'
+					},
+					{
+						value: 149,
+						label: '张北县'
+					},
+					{
+						value: 150,
+						label: '康保县'
+					},
+					{
+						value: 151,
+						label: '沽源县'
+					},
+					{
+						value: 152,
+						label: '尚义县'
+					},
+					{
+						value: 153,
+						label: '蔚县'
+					},
+					{
+						value: 154,
+						label: '阳原县'
+					},
+					{
+						value: 155,
+						label: '怀安县'
+					},
+					{
+						value: 156,
+						label: '万全县'
+					},
+					{
+						value: 157,
+						label: '怀来县'
+					},
+					{
+						value: 158,
+						label: '涿鹿县'
+					},
+					{
+						value: 159,
+						label: '赤城县'
+					},
+					{
+						value: 160,
+						label: '崇礼县'
+					}
+				]
+			},
+			{
+				value: 10,
+				label: '承德',
+				children: [{
+						value: 161,
+						label: '双桥区'
+					},
+					{
+						value: 162,
+						label: '双滦区'
+					},
+					{
+						value: 163,
+						label: '鹰手营子矿区'
+					},
+					{
+						value: 164,
+						label: '承德县'
+					},
+					{
+						value: 165,
+						label: '兴隆县'
+					},
+					{
+						value: 166,
+						label: '平泉县'
+					},
+					{
+						value: 167,
+						label: '滦平县'
+					},
+					{
+						value: 168,
+						label: '隆化县'
+					},
+					{
+						value: 169,
+						label: '丰宁满族自治县'
+					},
+					{
+						value: 170,
+						label: '宽城满族自治县'
+					},
+					{
+						value: 171,
+						label: '围场满族蒙古族自治县'
+					}
+				]
+			},
+			{
+				value: 11,
+				label: '沧州',
+				children: [{
+						value: 172,
+						label: '新华区'
+					},
+					{
+						value: 173,
+						label: '运河区'
+					},
+					{
+						value: 174,
+						label: '沧县'
+					},
+					{
+						value: 175,
+						label: '青县'
+					},
+					{
+						value: 176,
+						label: '东光县'
+					},
+					{
+						value: 177,
+						label: '海兴县'
+					},
+					{
+						value: 178,
+						label: '盐山县'
+					},
+					{
+						value: 179,
+						label: '肃宁县'
+					},
+					{
+						value: 180,
+						label: '南皮县'
+					},
+					{
+						value: 181,
+						label: '吴桥县'
+					},
+					{
+						value: 182,
+						label: '献县'
+					},
+					{
+						value: 183,
+						label: '孟村回族自治县'
+					},
+					{
+						value: 184,
+						label: '泊头'
+					},
+					{
+						value: 185,
+						label: '任丘'
+					},
+					{
+						value: 186,
+						label: '黄骅'
+					},
+					{
+						value: 187,
+						label: '河间'
+					}
+				]
+			},
+			{
+				value: 12,
+				label: '廊坊',
+				children: [{
+						value: 188,
+						label: '安次区'
+					},
+					{
+						value: 189,
+						label: '广阳区'
+					},
+					{
+						value: 190,
+						label: '固安县'
+					},
+					{
+						value: 191,
+						label: '永清县'
+					},
+					{
+						value: 192,
+						label: '香河县'
+					},
+					{
+						value: 193,
+						label: '大城县'
+					},
+					{
+						value: 194,
+						label: '文安县'
+					},
+					{
+						value: 195,
+						label: '大厂回族自治县'
+					},
+					{
+						value: 196,
+						label: '霸州'
+					},
+					{
+						value: 197,
+						label: '三河'
+					}
+				]
+			},
+			{
+				value: 13,
+				label: '衡水',
+				children: [{
+						value: 198,
+						label: '桃城区'
+					},
+					{
+						value: 199,
+						label: '枣强县'
+					},
+					{
+						value: 200,
+						label: '武邑县'
+					},
+					{
+						value: 201,
+						label: '武强县'
+					},
+					{
+						value: 202,
+						label: '饶阳县'
+					},
+					{
+						value: 203,
+						label: '安平县'
+					},
+					{
+						value: 204,
+						label: '故城县'
+					},
+					{
+						value: 205,
+						label: '景县'
+					},
+					{
+						value: 206,
+						label: '阜城县'
+					},
+					{
+						value: 207,
+						label: '冀州'
+					},
+					{
+						value: 208,
+						label: '深州'
+					}
+				]
+			}
+		]
+	},
+	{
+		value: 4,
+		label: '山西',
+		children: [{
+				value: 14,
+				label: '太原',
+				children: [{
+						value: 209,
+						label: '小店区'
+					},
+					{
+						value: 210,
+						label: '迎泽区'
+					},
+					{
+						value: 211,
+						label: '杏花岭区'
+					},
+					{
+						value: 212,
+						label: '尖草坪区'
+					},
+					{
+						value: 213,
+						label: '万柏林区'
+					},
+					{
+						value: 214,
+						label: '晋源区'
+					},
+					{
+						value: 215,
+						label: '清徐县'
+					},
+					{
+						value: 216,
+						label: '阳曲县'
+					},
+					{
+						value: 217,
+						label: '娄烦县'
+					},
+					{
+						value: 218,
+						label: '古交'
+					}
+				]
+			},
+			{
+				value: 15,
+				label: '大同',
+				children: [{
+						value: 219,
+						label: '城区'
+					},
+					{
+						value: 220,
+						label: '矿区'
+					},
+					{
+						value: 221,
+						label: '南郊区'
+					},
+					{
+						value: 222,
+						label: '新荣区'
+					},
+					{
+						value: 223,
+						label: '阳高县'
+					},
+					{
+						value: 224,
+						label: '天镇县'
+					},
+					{
+						value: 225,
+						label: '广灵县'
+					},
+					{
+						value: 226,
+						label: '灵丘县'
+					},
+					{
+						value: 227,
+						label: '浑源县'
+					},
+					{
+						value: 228,
+						label: '左云县'
+					},
+					{
+						value: 229,
+						label: '大同县'
+					}
+				]
+			},
+			{
+				value: 16,
+				label: '阳泉',
+				children: [{
+						value: 230,
+						label: '城区'
+					},
+					{
+						value: 231,
+						label: '矿区'
+					},
+					{
+						value: 232,
+						label: '郊区'
+					},
+					{
+						value: 233,
+						label: '平定县'
+					},
+					{
+						value: 234,
+						label: '盂县'
+					}
+				]
+			},
+			{
+				value: 17,
+				label: '长治',
+				children: [{
+						value: 235,
+						label: '城区'
+					},
+					{
+						value: 236,
+						label: '郊区'
+					},
+					{
+						value: 237,
+						label: '长治县'
+					},
+					{
+						value: 238,
+						label: '襄垣县'
+					},
+					{
+						value: 239,
+						label: '屯留县'
+					},
+					{
+						value: 240,
+						label: '平顺县'
+					},
+					{
+						value: 241,
+						label: '黎城县'
+					},
+					{
+						value: 242,
+						label: '壶关县'
+					},
+					{
+						value: 243,
+						label: '长子县'
+					},
+					{
+						value: 244,
+						label: '武乡县'
+					},
+					{
+						value: 245,
+						label: '沁县'
+					},
+					{
+						value: 246,
+						label: '沁源县'
+					},
+					{
+						value: 247,
+						label: '潞城'
+					}
+				]
+			},
+			{
+				value: 18,
+				label: '晋城',
+				children: [{
+						value: 248,
+						label: '城区'
+					},
+					{
+						value: 249,
+						label: '沁水县'
+					},
+					{
+						value: 250,
+						label: '阳城县'
+					},
+					{
+						value: 251,
+						label: '陵川县'
+					},
+					{
+						value: 252,
+						label: '泽州县'
+					},
+					{
+						value: 253,
+						label: '高平'
+					}
+				]
+			},
+			{
+				value: 19,
+				label: '朔州',
+				children: [{
+						value: 254,
+						label: '朔城区'
+					},
+					{
+						value: 255,
+						label: '平鲁区'
+					},
+					{
+						value: 256,
+						label: '山阴县'
+					},
+					{
+						value: 257,
+						label: '应县'
+					},
+					{
+						value: 258,
+						label: '右玉县'
+					},
+					{
+						value: 259,
+						label: '怀仁县'
+					}
+				]
+			},
+			{
+				value: 20,
+				label: '晋中',
+				children: [{
+						value: 260,
+						label: '榆次区'
+					},
+					{
+						value: 261,
+						label: '榆社县'
+					},
+					{
+						value: 262,
+						label: '左权县'
+					},
+					{
+						value: 263,
+						label: '和顺县'
+					},
+					{
+						value: 264,
+						label: '昔阳县'
+					},
+					{
+						value: 265,
+						label: '寿阳县'
+					},
+					{
+						value: 266,
+						label: '太谷县'
+					},
+					{
+						value: 267,
+						label: '祁县'
+					},
+					{
+						value: 268,
+						label: '平遥县'
+					},
+					{
+						value: 269,
+						label: '灵石县'
+					},
+					{
+						value: 270,
+						label: '介休'
+					}
+				]
+			},
+			{
+				value: 21,
+				label: '运城',
+				children: [{
+						value: 271,
+						label: '盐湖区'
+					},
+					{
+						value: 272,
+						label: '临猗县'
+					},
+					{
+						value: 273,
+						label: '万荣县'
+					},
+					{
+						value: 274,
+						label: '闻喜县'
+					},
+					{
+						value: 275,
+						label: '稷山县'
+					},
+					{
+						value: 276,
+						label: '新绛县'
+					},
+					{
+						value: 277,
+						label: '绛县'
+					},
+					{
+						value: 278,
+						label: '垣曲县'
+					},
+					{
+						value: 279,
+						label: '夏县'
+					},
+					{
+						value: 280,
+						label: '平陆县'
+					},
+					{
+						value: 281,
+						label: '芮城县'
+					},
+					{
+						value: 282,
+						label: '永济'
+					},
+					{
+						value: 283,
+						label: '河津'
+					}
+				]
+			},
+			{
+				value: 22,
+				label: '忻州',
+				children: [{
+						value: 284,
+						label: '忻府区'
+					},
+					{
+						value: 285,
+						label: '定襄县'
+					},
+					{
+						value: 286,
+						label: '五台县'
+					},
+					{
+						value: 287,
+						label: '代县'
+					},
+					{
+						value: 288,
+						label: '繁峙县'
+					},
+					{
+						value: 289,
+						label: '宁武县'
+					},
+					{
+						value: 290,
+						label: '静乐县'
+					},
+					{
+						value: 291,
+						label: '神池县'
+					},
+					{
+						value: 292,
+						label: '五寨县'
+					},
+					{
+						value: 293,
+						label: '岢岚县'
+					},
+					{
+						value: 294,
+						label: '河曲县'
+					},
+					{
+						value: 295,
+						label: '保德县'
+					},
+					{
+						value: 296,
+						label: '偏关县'
+					},
+					{
+						value: 297,
+						label: '原平'
+					}
+				]
+			},
+			{
+				value: 23,
+				label: '临汾',
+				children: [{
+						value: 298,
+						label: '尧都区'
+					},
+					{
+						value: 299,
+						label: '曲沃县'
+					},
+					{
+						value: 300,
+						label: '翼城县'
+					},
+					{
+						value: 301,
+						label: '襄汾县'
+					},
+					{
+						value: 302,
+						label: '洪洞县'
+					},
+					{
+						value: 303,
+						label: '古县'
+					},
+					{
+						value: 304,
+						label: '安泽县'
+					},
+					{
+						value: 305,
+						label: '浮山县'
+					},
+					{
+						value: 306,
+						label: '吉县'
+					},
+					{
+						value: 307,
+						label: '乡宁县'
+					},
+					{
+						value: 308,
+						label: '大宁县'
+					},
+					{
+						value: 309,
+						label: '隰县'
+					},
+					{
+						value: 310,
+						label: '永和县'
+					},
+					{
+						value: 311,
+						label: '蒲县'
+					},
+					{
+						value: 312,
+						label: '汾西县'
+					},
+					{
+						value: 313,
+						label: '侯马'
+					},
+					{
+						value: 314,
+						label: '霍州'
+					}
+				]
+			},
+			{
+				value: 24,
+				label: '吕梁',
+				children: [{
+						value: 315,
+						label: '离石区'
+					},
+					{
+						value: 316,
+						label: '文水县'
+					},
+					{
+						value: 317,
+						label: '交城县'
+					},
+					{
+						value: 318,
+						label: '兴县'
+					},
+					{
+						value: 319,
+						label: '临县'
+					},
+					{
+						value: 320,
+						label: '柳林县'
+					},
+					{
+						value: 321,
+						label: '石楼县'
+					},
+					{
+						value: 322,
+						label: '岚县'
+					},
+					{
+						value: 323,
+						label: '方山县'
+					},
+					{
+						value: 324,
+						label: '中阳县'
+					},
+					{
+						value: 325,
+						label: '交口县'
+					},
+					{
+						value: 326,
+						label: '孝义'
+					},
+					{
+						value: 327,
+						label: '汾阳'
+					}
+				]
+			}
+		]
+	},
+	{
+		value: 5,
+		label: '内蒙古',
+		children: [{
+				value: 25,
+				label: '呼和浩特',
+				children: [{
+						value: 328,
+						label: '新城区'
+					},
+					{
+						value: 329,
+						label: '回民区'
+					},
+					{
+						value: 330,
+						label: '玉泉区'
+					},
+					{
+						value: 331,
+						label: '赛罕区'
+					},
+					{
+						value: 332,
+						label: '土默特左旗'
+					},
+					{
+						value: 333,
+						label: '托克托县'
+					},
+					{
+						value: 334,
+						label: '和林格尔县'
+					},
+					{
+						value: 335,
+						label: '清水河县'
+					},
+					{
+						value: 336,
+						label: '武川县'
+					}
+				]
+			},
+			{
+				value: 26,
+				label: '包头',
+				children: [{
+						value: 337,
+						label: '东河区'
+					},
+					{
+						value: 338,
+						label: '昆都仑区'
+					},
+					{
+						value: 339,
+						label: '青山区'
+					},
+					{
+						value: 340,
+						label: '石拐区'
+					},
+					{
+						value: 341,
+						label: '白云矿区'
+					},
+					{
+						value: 342,
+						label: '九原区'
+					},
+					{
+						value: 343,
+						label: '土默特右旗'
+					},
+					{
+						value: 344,
+						label: '固阳县'
+					},
+					{
+						value: 345,
+						label: '达尔罕茂明安联合旗'
+					}
+				]
+			},
+			{
+				value: 27,
+				label: '乌海',
+				children: [{
+						value: 346,
+						label: '海勃湾区'
+					},
+					{
+						value: 347,
+						label: '海南区'
+					},
+					{
+						value: 348,
+						label: '乌达区'
+					}
+				]
+			},
+			{
+				value: 28,
+				label: '赤峰',
+				children: [{
+						value: 349,
+						label: '红山区'
+					},
+					{
+						value: 350,
+						label: '元宝山区'
+					},
+					{
+						value: 351,
+						label: '松山区'
+					},
+					{
+						value: 352,
+						label: '阿鲁科尔沁旗'
+					},
+					{
+						value: 353,
+						label: '巴林左旗'
+					},
+					{
+						value: 354,
+						label: '巴林右旗'
+					},
+					{
+						value: 355,
+						label: '林西县'
+					},
+					{
+						value: 356,
+						label: '克什克腾旗'
+					},
+					{
+						value: 357,
+						label: '翁牛特旗'
+					},
+					{
+						value: 358,
+						label: '喀喇沁旗'
+					},
+					{
+						value: 359,
+						label: '宁城县'
+					},
+					{
+						value: 360,
+						label: '敖汉旗'
+					}
+				]
+			},
+			{
+				value: 29,
+				label: '通辽',
+				children: [{
+						value: 361,
+						label: '科尔沁区'
+					},
+					{
+						value: 362,
+						label: '科尔沁左翼中旗'
+					},
+					{
+						value: 363,
+						label: '科尔沁左翼后旗'
+					},
+					{
+						value: 364,
+						label: '开鲁县'
+					},
+					{
+						value: 365,
+						label: '库伦旗'
+					},
+					{
+						value: 366,
+						label: '奈曼旗'
+					},
+					{
+						value: 367,
+						label: '扎鲁特旗'
+					},
+					{
+						value: 368,
+						label: '霍林郭勒'
+					}
+				]
+			},
+			{
+				value: 30,
+				label: '鄂尔多斯',
+				children: [{
+						value: 369,
+						label: '东胜区'
+					},
+					{
+						value: 370,
+						label: '达拉特旗'
+					},
+					{
+						value: 371,
+						label: '准格尔旗'
+					},
+					{
+						value: 372,
+						label: '鄂托克前旗'
+					},
+					{
+						value: 373,
+						label: '鄂托克旗'
+					},
+					{
+						value: 374,
+						label: '杭锦旗'
+					},
+					{
+						value: 375,
+						label: '乌审旗'
+					},
+					{
+						value: 376,
+						label: '伊金霍洛旗'
+					}
+				]
+			},
+			{
+				value: 31,
+				label: '呼伦贝尔',
+				children: [{
+						value: 377,
+						label: '海拉尔区'
+					},
+					{
+						value: 378,
+						label: '阿荣旗'
+					},
+					{
+						value: 379,
+						label: '莫力达瓦达斡尔族自治旗'
+					},
+					{
+						value: 380,
+						label: '鄂伦春自治旗'
+					},
+					{
+						value: 381,
+						label: '鄂温克族自治旗'
+					},
+					{
+						value: 382,
+						label: '陈巴尔虎旗'
+					},
+					{
+						value: 383,
+						label: '新巴尔虎左旗'
+					},
+					{
+						value: 384,
+						label: '新巴尔虎右旗'
+					},
+					{
+						value: 385,
+						label: '满洲里'
+					},
+					{
+						value: 386,
+						label: '牙克石'
+					},
+					{
+						value: 387,
+						label: '扎兰屯'
+					},
+					{
+						value: 388,
+						label: '额尔古纳'
+					},
+					{
+						value: 389,
+						label: '根河'
+					}
+				]
+			},
+			{
+				value: 32,
+				label: '巴彦淖尔',
+				children: [{
+						value: 390,
+						label: '临河区'
+					},
+					{
+						value: 391,
+						label: '五原县'
+					},
+					{
+						value: 392,
+						label: '磴口县'
+					},
+					{
+						value: 393,
+						label: '乌拉特前旗'
+					},
+					{
+						value: 394,
+						label: '乌拉特中旗'
+					},
+					{
+						value: 395,
+						label: '乌拉特后旗'
+					},
+					{
+						value: 396,
+						label: '杭锦后旗'
+					}
+				]
+			},
+			{
+				value: 33,
+				label: '乌兰察布',
+				children: [{
+						value: 397,
+						label: '集宁区'
+					},
+					{
+						value: 398,
+						label: '卓资县'
+					},
+					{
+						value: 399,
+						label: '化德县'
+					},
+					{
+						value: 400,
+						label: '商都县'
+					},
+					{
+						value: 401,
+						label: '兴和县'
+					},
+					{
+						value: 402,
+						label: '凉城县'
+					},
+					{
+						value: 403,
+						label: '察哈尔右翼前旗'
+					},
+					{
+						value: 404,
+						label: '察哈尔右翼中旗'
+					},
+					{
+						value: 405,
+						label: '察哈尔右翼后旗'
+					},
+					{
+						value: 406,
+						label: '四子王旗'
+					},
+					{
+						value: 407,
+						label: '丰镇'
+					}
+				]
+			},
+			{
+				value: 34,
+				label: '兴安盟',
+				children: [{
+						value: 408,
+						label: '乌兰浩特'
+					},
+					{
+						value: 409,
+						label: '阿尔山'
+					},
+					{
+						value: 410,
+						label: '科尔沁右翼前旗'
+					},
+					{
+						value: 411,
+						label: '科尔沁右翼中旗'
+					},
+					{
+						value: 412,
+						label: '扎赉特旗'
+					},
+					{
+						value: 413,
+						label: '突泉县'
+					}
+				]
+			},
+			{
+				value: 35,
+				label: '锡林郭勒盟',
+				children: [{
+						value: 414,
+						label: '二连浩特'
+					},
+					{
+						value: 415,
+						label: '锡林浩特'
+					},
+					{
+						value: 416,
+						label: '阿巴嘎旗'
+					},
+					{
+						value: 417,
+						label: '苏尼特左旗'
+					},
+					{
+						value: 418,
+						label: '苏尼特右旗'
+					},
+					{
+						value: 419,
+						label: '东乌珠穆沁旗'
+					},
+					{
+						value: 420,
+						label: '西乌珠穆沁旗'
+					},
+					{
+						value: 421,
+						label: '太仆寺旗'
+					},
+					{
+						value: 422,
+						label: '镶黄旗'
+					},
+					{
+						value: 423,
+						label: '正镶白旗'
+					},
+					{
+						value: 424,
+						label: '正蓝旗'
+					},
+					{
+						value: 425,
+						label: '多伦县'
+					}
+				]
+			},
+			{
+				value: 36,
+				label: '阿拉善盟',
+				children: [{
+						value: 426,
+						label: '阿拉善左旗'
+					},
+					{
+						value: 427,
+						label: '阿拉善右旗'
+					},
+					{
+						value: 428,
+						label: '额济纳旗'
+					}
+				]
+			}
+		]
+	},
+	{
+		value: 6,
+		label: '辽宁',
+		children: [{
+				value: 37,
+				label: '沈阳',
+				children: [{
+						value: 429,
+						label: '和平区'
+					},
+					{
+						value: 430,
+						label: '沈河区'
+					},
+					{
+						value: 431,
+						label: '大东区'
+					},
+					{
+						value: 432,
+						label: '皇姑区'
+					},
+					{
+						value: 433,
+						label: '铁西区'
+					},
+					{
+						value: 434,
+						label: '苏家屯区'
+					},
+					{
+						value: 435,
+						label: '东陵区'
+					},
+					{
+						value: 436,
+						label: '新城子区'
+					},
+					{
+						value: 437,
+						label: '于洪区'
+					},
+					{
+						value: 438,
+						label: '辽中县'
+					},
+					{
+						value: 439,
+						label: '康平县'
+					},
+					{
+						value: 440,
+						label: '法库县'
+					},
+					{
+						value: 441,
+						label: '新民'
+					}
+				]
+			},
+			{
+				value: 38,
+				label: '大连',
+				children: [{
+						value: 442,
+						label: '中山区'
+					},
+					{
+						value: 443,
+						label: '西岗区'
+					},
+					{
+						value: 444,
+						label: '沙河口区'
+					},
+					{
+						value: 445,
+						label: '甘井子区'
+					},
+					{
+						value: 446,
+						label: '旅顺口区'
+					},
+					{
+						value: 447,
+						label: '金州区'
+					},
+					{
+						value: 448,
+						label: '长海县'
+					},
+					{
+						value: 449,
+						label: '瓦房店'
+					},
+					{
+						value: 450,
+						label: '普兰店'
+					},
+					{
+						value: 451,
+						label: '庄河'
+					}
+				]
+			},
+			{
+				value: 39,
+				label: '鞍山',
+				children: [{
+						value: 452,
+						label: '铁东区'
+					},
+					{
+						value: 453,
+						label: '铁西区'
+					},
+					{
+						value: 454,
+						label: '立山区'
+					},
+					{
+						value: 455,
+						label: '千山区'
+					},
+					{
+						value: 456,
+						label: '台安县'
+					},
+					{
+						value: 457,
+						label: '岫岩满族自治县'
+					},
+					{
+						value: 458,
+						label: '海城'
+					}
+				]
+			},
+			{
+				value: 40,
+				label: '抚顺',
+				children: [{
+						value: 459,
+						label: '新抚区'
+					},
+					{
+						value: 460,
+						label: '东洲区'
+					},
+					{
+						value: 461,
+						label: '望花区'
+					},
+					{
+						value: 462,
+						label: '顺城区'
+					},
+					{
+						value: 463,
+						label: '抚顺县'
+					},
+					{
+						value: 464,
+						label: '新宾满族自治县'
+					},
+					{
+						value: 465,
+						label: '清原满族自治县'
+					}
+				]
+			},
+			{
+				value: 41,
+				label: '本溪',
+				children: [{
+						value: 466,
+						label: '平山区'
+					},
+					{
+						value: 467,
+						label: '溪湖区'
+					},
+					{
+						value: 468,
+						label: '明山区'
+					},
+					{
+						value: 469,
+						label: '南芬区'
+					},
+					{
+						value: 470,
+						label: '本溪满族自治县'
+					},
+					{
+						value: 471,
+						label: '桓仁满族自治县'
+					}
+				]
+			},
+			{
+				value: 42,
+				label: '丹东',
+				children: [{
+						value: 472,
+						label: '元宝区'
+					},
+					{
+						value: 473,
+						label: '振兴区'
+					},
+					{
+						value: 474,
+						label: '振安区'
+					},
+					{
+						value: 475,
+						label: '宽甸满族自治县'
+					},
+					{
+						value: 476,
+						label: '东港'
+					},
+					{
+						value: 477,
+						label: '凤城'
+					}
+				]
+			},
+			{
+				value: 43,
+				label: '锦州',
+				children: [{
+						value: 478,
+						label: '古塔区'
+					},
+					{
+						value: 479,
+						label: '凌河区'
+					},
+					{
+						value: 480,
+						label: '太和区'
+					},
+					{
+						value: 481,
+						label: '黑山县'
+					},
+					{
+						value: 482,
+						label: '义县'
+					},
+					{
+						value: 483,
+						label: '凌海'
+					},
+					{
+						value: 484,
+						label: '北宁'
+					}
+				]
+			},
+			{
+				value: 44,
+				label: '营口',
+				children: [{
+						value: 485,
+						label: '站前区'
+					},
+					{
+						value: 486,
+						label: '西区'
+					},
+					{
+						value: 487,
+						label: '鲅鱼圈区'
+					},
+					{
+						value: 488,
+						label: '老边区'
+					},
+					{
+						value: 489,
+						label: '盖州'
+					},
+					{
+						value: 490,
+						label: '大石桥'
+					}
+				]
+			},
+			{
+				value: 45,
+				label: '阜新',
+				children: [{
+						value: 491,
+						label: '海州区'
+					},
+					{
+						value: 492,
+						label: '新邱区'
+					},
+					{
+						value: 493,
+						label: '太平区'
+					},
+					{
+						value: 494,
+						label: '清河门区'
+					},
+					{
+						value: 495,
+						label: '细河区'
+					},
+					{
+						value: 496,
+						label: '阜新蒙古族自治县'
+					},
+					{
+						value: 497,
+						label: '彰武县'
+					}
+				]
+			},
+			{
+				value: 46,
+				label: '辽阳',
+				children: [{
+						value: 498,
+						label: '白塔区'
+					},
+					{
+						value: 499,
+						label: '文圣区'
+					},
+					{
+						value: 500,
+						label: '宏伟区'
+					},
+					{
+						value: 501,
+						label: '弓长岭区'
+					},
+					{
+						value: 502,
+						label: '太子河区'
+					},
+					{
+						value: 503,
+						label: '辽阳县'
+					},
+					{
+						value: 504,
+						label: '灯塔'
+					}
+				]
+			},
+			{
+				value: 47,
+				label: '盘锦',
+				children: [{
+						value: 505,
+						label: '双台子区'
+					},
+					{
+						value: 506,
+						label: '兴隆台区'
+					},
+					{
+						value: 507,
+						label: '大洼县'
+					},
+					{
+						value: 508,
+						label: '盘山县'
+					}
+				]
+			},
+			{
+				value: 48,
+				label: '铁岭',
+				children: [{
+						value: 509,
+						label: '银州区'
+					},
+					{
+						value: 510,
+						label: '清河区'
+					},
+					{
+						value: 511,
+						label: '铁岭县'
+					},
+					{
+						value: 512,
+						label: '西丰县'
+					},
+					{
+						value: 513,
+						label: '昌图县'
+					},
+					{
+						value: 514,
+						label: '调兵山'
+					},
+					{
+						value: 515,
+						label: '开原'
+					}
+				]
+			},
+			{
+				value: 49,
+				label: '朝阳',
+				children: [{
+						value: 516,
+						label: '双塔区'
+					},
+					{
+						value: 517,
+						label: '龙城区'
+					},
+					{
+						value: 518,
+						label: '朝阳县'
+					},
+					{
+						value: 519,
+						label: '建平县'
+					},
+					{
+						value: 520,
+						label: '喀喇沁左翼蒙古族自治县'
+					},
+					{
+						value: 521,
+						label: '北票'
+					},
+					{
+						value: 522,
+						label: '凌源'
+					}
+				]
+			},
+			{
+				value: 50,
+				label: '葫芦岛',
+				children: [{
+						value: 523,
+						label: '连山区'
+					},
+					{
+						value: 524,
+						label: '龙港区'
+					},
+					{
+						value: 525,
+						label: '南票区'
+					},
+					{
+						value: 526,
+						label: '绥中县'
+					},
+					{
+						value: 527,
+						label: '建昌县'
+					},
+					{
+						value: 528,
+						label: '兴城'
+					}
+				]
+			}
+		]
+	},
+	{
+		value: 7,
+		label: '吉林',
+		children: [{
+				value: 51,
+				label: '长春',
+				children: [{
+						value: 529,
+						label: '南关区'
+					},
+					{
+						value: 530,
+						label: '宽城区'
+					},
+					{
+						value: 531,
+						label: '朝阳区'
+					},
+					{
+						value: 532,
+						label: '二道区'
+					},
+					{
+						value: 533,
+						label: '绿园区'
+					},
+					{
+						value: 534,
+						label: '双阳区'
+					},
+					{
+						value: 535,
+						label: '农安县'
+					},
+					{
+						value: 536,
+						label: '九台'
+					},
+					{
+						value: 537,
+						label: '榆树'
+					},
+					{
+						value: 538,
+						label: '德惠'
+					}
+				]
+			},
+			{
+				value: 52,
+				label: '吉林',
+				children: [{
+						value: 539,
+						label: '昌邑区'
+					},
+					{
+						value: 540,
+						label: '龙潭区'
+					},
+					{
+						value: 541,
+						label: '船营区'
+					},
+					{
+						value: 542,
+						label: '丰满区'
+					},
+					{
+						value: 543,
+						label: '永吉县'
+					},
+					{
+						value: 544,
+						label: '蛟河'
+					},
+					{
+						value: 545,
+						label: '桦甸'
+					},
+					{
+						value: 546,
+						label: '舒兰'
+					},
+					{
+						value: 547,
+						label: '磐石'
+					}
+				]
+			},
+			{
+				value: 53,
+				label: '四平',
+				children: [{
+						value: 548,
+						label: '铁西区'
+					},
+					{
+						value: 549,
+						label: '铁东区'
+					},
+					{
+						value: 550,
+						label: '梨树县'
+					},
+					{
+						value: 551,
+						label: '伊通满族自治县'
+					},
+					{
+						value: 552,
+						label: '公主岭'
+					},
+					{
+						value: 553,
+						label: '双辽'
+					}
+				]
+			},
+			{
+				value: 54,
+				label: '辽源',
+				children: [{
+						value: 554,
+						label: '龙山区'
+					},
+					{
+						value: 555,
+						label: '西安区'
+					},
+					{
+						value: 556,
+						label: '东丰县'
+					},
+					{
+						value: 557,
+						label: '东辽县'
+					}
+				]
+			},
+			{
+				value: 55,
+				label: '通化',
+				children: [{
+						value: 558,
+						label: '东昌区'
+					},
+					{
+						value: 559,
+						label: '二道江区'
+					},
+					{
+						value: 560,
+						label: '通化县'
+					},
+					{
+						value: 561,
+						label: '辉南县'
+					},
+					{
+						value: 562,
+						label: '柳河县'
+					},
+					{
+						value: 563,
+						label: '梅河口'
+					},
+					{
+						value: 564,
+						label: '集安'
+					}
+				]
+			},
+			{
+				value: 56,
+				label: '白山',
+				children: [{
+						value: 565,
+						label: '八道江区'
+					},
+					{
+						value: 566,
+						label: '抚松县'
+					},
+					{
+						value: 567,
+						label: '靖宇县'
+					},
+					{
+						value: 568,
+						label: '长白朝鲜族自治县'
+					},
+					{
+						value: 569,
+						label: '江源县'
+					},
+					{
+						value: 570,
+						label: '临江'
+					}
+				]
+			},
+			{
+				value: 57,
+				label: '松原',
+				children: [{
+						value: 571,
+						label: '宁江区'
+					},
+					{
+						value: 572,
+						label: '前郭尔罗斯蒙古族自治县'
+					},
+					{
+						value: 573,
+						label: '长岭县'
+					},
+					{
+						value: 574,
+						label: '乾安县'
+					},
+					{
+						value: 575,
+						label: '扶余县'
+					}
+				]
+			},
+			{
+				value: 58,
+				label: '白城',
+				children: [{
+						value: 576,
+						label: '洮北区'
+					},
+					{
+						value: 577,
+						label: '镇赉县'
+					},
+					{
+						value: 578,
+						label: '通榆县'
+					},
+					{
+						value: 579,
+						label: '洮南'
+					},
+					{
+						value: 580,
+						label: '大安'
+					}
+				]
+			},
+			{
+				value: 59,
+				label: '延边',
+				children: [{
+						value: 581,
+						label: '延吉'
+					},
+					{
+						value: 582,
+						label: '图们'
+					},
+					{
+						value: 583,
+						label: '敦化'
+					},
+					{
+						value: 584,
+						label: '珲春'
+					},
+					{
+						value: 585,
+						label: '龙井'
+					},
+					{
+						value: 586,
+						label: '和龙'
+					},
+					{
+						value: 587,
+						label: '汪清县'
+					},
+					{
+						value: 588,
+						label: '安图县'
+					}
+				]
+			}
+		]
+	},
+	{
+		value: 8,
+		label: '黑龙江',
+		children: [{
+				value: 60,
+				label: '哈尔滨',
+				children: [{
+						value: 589,
+						label: '道里区'
+					},
+					{
+						value: 590,
+						label: '南岗区'
+					},
+					{
+						value: 591,
+						label: '道外区'
+					},
+					{
+						value: 592,
+						label: '香坊区'
+					},
+					{
+						value: 593,
+						label: '动力区'
+					},
+					{
+						value: 594,
+						label: '平房区'
+					},
+					{
+						value: 595,
+						label: '松北区'
+					},
+					{
+						value: 596,
+						label: '呼兰区'
+					},
+					{
+						value: 597,
+						label: '依兰县'
+					},
+					{
+						value: 598,
+						label: '方正县'
+					},
+					{
+						value: 599,
+						label: '宾县'
+					},
+					{
+						value: 600,
+						label: '巴彦县'
+					},
+					{
+						value: 601,
+						label: '木兰县'
+					},
+					{
+						value: 602,
+						label: '通河县'
+					},
+					{
+						value: 603,
+						label: '延寿县'
+					},
+					{
+						value: 604,
+						label: '阿城'
+					},
+					{
+						value: 605,
+						label: '双城'
+					},
+					{
+						value: 606,
+						label: '尚志'
+					},
+					{
+						value: 607,
+						label: '五常'
+					}
+				]
+			},
+			{
+				value: 61,
+				label: '齐齐哈尔',
+				children: [{
+						value: 608,
+						label: '龙沙区'
+					},
+					{
+						value: 609,
+						label: '建华区'
+					},
+					{
+						value: 610,
+						label: '铁锋区'
+					},
+					{
+						value: 611,
+						label: '昂昂溪区'
+					},
+					{
+						value: 612,
+						label: '富拉尔基区'
+					},
+					{
+						value: 613,
+						label: '碾子山区'
+					},
+					{
+						value: 614,
+						label: '梅里斯达斡尔族区'
+					},
+					{
+						value: 615,
+						label: '龙江县'
+					},
+					{
+						value: 616,
+						label: '依安县'
+					},
+					{
+						value: 617,
+						label: '泰来县'
+					},
+					{
+						value: 618,
+						label: '甘南县'
+					},
+					{
+						value: 619,
+						label: '富裕县'
+					},
+					{
+						value: 620,
+						label: '克山县'
+					},
+					{
+						value: 621,
+						label: '克东县'
+					},
+					{
+						value: 622,
+						label: '拜泉县'
+					},
+					{
+						value: 623,
+						label: '讷河'
+					}
+				]
+			},
+			{
+				value: 62,
+				label: '鸡西',
+				children: [{
+						value: 624,
+						label: '鸡冠区'
+					},
+					{
+						value: 625,
+						label: '恒山区'
+					},
+					{
+						value: 626,
+						label: '滴道区'
+					},
+					{
+						value: 627,
+						label: '梨树区'
+					},
+					{
+						value: 628,
+						label: '城子河区'
+					},
+					{
+						value: 629,
+						label: '麻山区'
+					},
+					{
+						value: 630,
+						label: '鸡东县'
+					},
+					{
+						value: 631,
+						label: '虎林'
+					},
+					{
+						value: 632,
+						label: '密山'
+					}
+				]
+			},
+			{
+				value: 63,
+				label: '鹤岗',
+				children: [{
+						value: 633,
+						label: '向阳区'
+					},
+					{
+						value: 634,
+						label: '工农区'
+					},
+					{
+						value: 635,
+						label: '南山区'
+					},
+					{
+						value: 636,
+						label: '兴安区'
+					},
+					{
+						value: 637,
+						label: '东山区'
+					},
+					{
+						value: 638,
+						label: '兴山区'
+					},
+					{
+						value: 639,
+						label: '萝北县'
+					},
+					{
+						value: 640,
+						label: '绥滨县'
+					}
+				]
+			},
+			{
+				value: 64,
+				label: '双鸭山',
+				children: [{
+						value: 641,
+						label: '尖山区'
+					},
+					{
+						value: 642,
+						label: '岭东区'
+					},
+					{
+						value: 643,
+						label: '四方台区'
+					},
+					{
+						value: 644,
+						label: '宝山区'
+					},
+					{
+						value: 645,
+						label: '集贤县'
+					},
+					{
+						value: 646,
+						label: '友谊县'
+					},
+					{
+						value: 647,
+						label: '宝清县'
+					},
+					{
+						value: 648,
+						label: '饶河县'
+					}
+				]
+			},
+			{
+				value: 65,
+				label: '大庆',
+				children: [{
+						value: 649,
+						label: '萨尔图区'
+					},
+					{
+						value: 650,
+						label: '龙凤区'
+					},
+					{
+						value: 651,
+						label: '让胡路区'
+					},
+					{
+						value: 652,
+						label: '红岗区'
+					},
+					{
+						value: 653,
+						label: '大同区'
+					},
+					{
+						value: 654,
+						label: '肇州县'
+					},
+					{
+						value: 655,
+						label: '肇源县'
+					},
+					{
+						value: 656,
+						label: '林甸县'
+					},
+					{
+						value: 657,
+						label: '杜尔伯特蒙古族自治县'
+					}
+				]
+			},
+			{
+				value: 66,
+				label: '伊春',
+				children: [{
+						value: 658,
+						label: '伊春区'
+					},
+					{
+						value: 659,
+						label: '南岔区'
+					},
+					{
+						value: 660,
+						label: '友好区'
+					},
+					{
+						value: 661,
+						label: '西林区'
+					},
+					{
+						value: 662,
+						label: '翠峦区'
+					},
+					{
+						value: 663,
+						label: '新青区'
+					},
+					{
+						value: 664,
+						label: '美溪区'
+					},
+					{
+						value: 665,
+						label: '金山屯区'
+					},
+					{
+						value: 666,
+						label: '五营区'
+					},
+					{
+						value: 667,
+						label: '乌马河区'
+					},
+					{
+						value: 668,
+						label: '汤旺河区'
+					},
+					{
+						value: 669,
+						label: '带岭区'
+					},
+					{
+						value: 670,
+						label: '乌伊岭区'
+					},
+					{
+						value: 671,
+						label: '红星区'
+					},
+					{
+						value: 672,
+						label: '上甘岭区'
+					},
+					{
+						value: 673,
+						label: '嘉荫县'
+					},
+					{
+						value: 674,
+						label: '铁力'
+					}
+				]
+			},
+			{
+				value: 67,
+				label: '佳木斯',
+				children: [{
+						value: 675,
+						label: '永红区'
+					},
+					{
+						value: 676,
+						label: '向阳区'
+					},
+					{
+						value: 677,
+						label: '前进区'
+					},
+					{
+						value: 678,
+						label: '东风区'
+					},
+					{
+						value: 679,
+						label: '郊区'
+					},
+					{
+						value: 680,
+						label: '桦南县'
+					},
+					{
+						value: 681,
+						label: '桦川县'
+					},
+					{
+						value: 682,
+						label: '汤原县'
+					},
+					{
+						value: 683,
+						label: '抚远县'
+					},
+					{
+						value: 684,
+						label: '同江'
+					},
+					{
+						value: 685,
+						label: '富锦'
+					}
+				]
+			},
+			{
+				value: 68,
+				label: '七台河',
+				children: [{
+						value: 686,
+						label: '新兴区'
+					},
+					{
+						value: 687,
+						label: '桃山区'
+					},
+					{
+						value: 688,
+						label: '茄子河区'
+					},
+					{
+						value: 689,
+						label: '勃利县'
+					}
+				]
+			},
+			{
+				value: 69,
+				label: '牡丹江',
+				children: [{
+						value: 690,
+						label: '东安区'
+					},
+					{
+						value: 691,
+						label: '阳明区'
+					},
+					{
+						value: 692,
+						label: '爱民区'
+					},
+					{
+						value: 693,
+						label: '西安区'
+					},
+					{
+						value: 694,
+						label: '东宁县'
+					},
+					{
+						value: 695,
+						label: '林口县'
+					},
+					{
+						value: 696,
+						label: '绥芬河'
+					},
+					{
+						value: 697,
+						label: '海林'
+					},
+					{
+						value: 698,
+						label: '宁安'
+					},
+					{
+						value: 699,
+						label: '穆棱'
+					}
+				]
+			},
+			{
+				value: 70,
+				label: '黑河',
+				children: [{
+						value: 700,
+						label: '爱辉区'
+					},
+					{
+						value: 701,
+						label: '嫩江县'
+					},
+					{
+						value: 702,
+						label: '逊克县'
+					},
+					{
+						value: 703,
+						label: '孙吴县'
+					},
+					{
+						value: 704,
+						label: '北安'
+					},
+					{
+						value: 705,
+						label: '五大连池'
+					}
+				]
+			},
+			{
+				value: 71,
+				label: '绥化',
+				children: [{
+						value: 706,
+						label: '北林区'
+					},
+					{
+						value: 707,
+						label: '望奎县'
+					},
+					{
+						value: 708,
+						label: '兰西县'
+					},
+					{
+						value: 709,
+						label: '青冈县'
+					},
+					{
+						value: 710,
+						label: '庆安县'
+					},
+					{
+						value: 711,
+						label: '明水县'
+					},
+					{
+						value: 712,
+						label: '绥棱县'
+					},
+					{
+						value: 713,
+						label: '安达'
+					},
+					{
+						value: 714,
+						label: '肇东'
+					},
+					{
+						value: 715,
+						label: '海伦'
+					}
+				]
+			},
+			{
+				value: 72,
+				label: '大兴安岭地区',
+				children: [{
+						value: 716,
+						label: '呼玛县'
+					},
+					{
+						value: 717,
+						label: '塔河县'
+					},
+					{
+						value: 718,
+						label: '漠河县'
+					}
+				]
+			}
+		]
+	},
+	{
+		value: 9,
+		label: '上海',
+		children: [{
+				value: 719,
+				label: '黄浦区'
+			},
+			{
+				value: 720,
+				label: '卢湾区'
+			},
+			{
+				value: 721,
+				label: '徐汇区'
+			},
+			{
+				value: 722,
+				label: '长宁区'
+			},
+			{
+				value: 723,
+				label: '静安区'
+			},
+			{
+				value: 724,
+				label: '普陀区'
+			},
+			{
+				value: 725,
+				label: '闸北区'
+			},
+			{
+				value: 726,
+				label: '虹口区'
+			},
+			{
+				value: 727,
+				label: '杨浦区'
+			},
+			{
+				value: 728,
+				label: '闵行区'
+			},
+			{
+				value: 729,
+				label: '宝山区'
+			},
+			{
+				value: 730,
+				label: '嘉定区'
+			},
+			{
+				value: 731,
+				label: '浦东新区'
+			},
+			{
+				value: 732,
+				label: '金山区'
+			},
+			{
+				value: 733,
+				label: '松江区'
+			},
+			{
+				value: 734,
+				label: '青浦区'
+			},
+			{
+				value: 735,
+				label: '南汇区'
+			},
+			{
+				value: 736,
+				label: '奉贤区'
+			},
+			{
+				value: 737,
+				label: '崇明县'
+			}
+		]
+	},
+	{
+		value: 10,
+		label: '江苏',
+		children: [{
+				value: 74,
+				label: '南京',
+				children: [{
+						value: 738,
+						label: '玄武区'
+					},
+					{
+						value: 739,
+						label: '白下区'
+					},
+					{
+						value: 740,
+						label: '秦淮区'
+					},
+					{
+						value: 741,
+						label: '建邺区'
+					},
+					{
+						value: 742,
+						label: '鼓楼区'
+					},
+					{
+						value: 743,
+						label: '下关区'
+					},
+					{
+						value: 744,
+						label: '浦口区'
+					},
+					{
+						value: 745,
+						label: '栖霞区'
+					},
+					{
+						value: 746,
+						label: '雨花台区'
+					},
+					{
+						value: 747,
+						label: '江宁区'
+					},
+					{
+						value: 748,
+						label: '六合区'
+					},
+					{
+						value: 749,
+						label: '溧水县'
+					},
+					{
+						value: 750,
+						label: '高淳县'
+					}
+				]
+			},
+			{
+				value: 75,
+				label: '无锡',
+				children: [{
+						value: 751,
+						label: '崇安区'
+					},
+					{
+						value: 752,
+						label: '南长区'
+					},
+					{
+						value: 753,
+						label: '北塘区'
+					},
+					{
+						value: 754,
+						label: '锡山区'
+					},
+					{
+						value: 755,
+						label: '惠山区'
+					},
+					{
+						value: 756,
+						label: '滨湖区'
+					},
+					{
+						value: 757,
+						label: '江阴'
+					},
+					{
+						value: 758,
+						label: '宜兴'
+					}
+				]
+			},
+			{
+				value: 76,
+				label: '徐州',
+				children: [{
+						value: 759,
+						label: '鼓楼区'
+					},
+					{
+						value: 760,
+						label: '云龙区'
+					},
+					{
+						value: 761,
+						label: '九里区'
+					},
+					{
+						value: 762,
+						label: '贾汪区'
+					},
+					{
+						value: 763,
+						label: '泉山区'
+					},
+					{
+						value: 764,
+						label: '丰县'
+					},
+					{
+						value: 765,
+						label: '沛县'
+					},
+					{
+						value: 766,
+						label: '铜山县'
+					},
+					{
+						value: 767,
+						label: '睢宁县'
+					},
+					{
+						value: 768,
+						label: '新沂'
+					},
+					{
+						value: 769,
+						label: '邳州'
+					}
+				]
+			},
+			{
+				value: 77,
+				label: '常州',
+				children: [{
+						value: 770,
+						label: '天宁区'
+					},
+					{
+						value: 771,
+						label: '钟楼区'
+					},
+					{
+						value: 772,
+						label: '戚墅堰区'
+					},
+					{
+						value: 773,
+						label: '新北区'
+					},
+					{
+						value: 774,
+						label: '武进区'
+					},
+					{
+						value: 775,
+						label: '溧阳'
+					},
+					{
+						value: 776,
+						label: '金坛'
+					}
+				]
+			},
+			{
+				value: 78,
+				label: '苏州',
+				children: [{
+						value: 777,
+						label: '沧浪区'
+					},
+					{
+						value: 778,
+						label: '平江区'
+					},
+					{
+						value: 779,
+						label: '金阊区'
+					},
+					{
+						value: 780,
+						label: '虎丘区'
+					},
+					{
+						value: 781,
+						label: '吴中区'
+					},
+					{
+						value: 782,
+						label: '相城区'
+					},
+					{
+						value: 783,
+						label: '常熟'
+					},
+					{
+						value: 784,
+						label: '张家港'
+					},
+					{
+						value: 785,
+						label: '昆山'
+					},
+					{
+						value: 786,
+						label: '吴江'
+					},
+					{
+						value: 787,
+						label: '太仓'
+					}
+				]
+			},
+			{
+				value: 79,
+				label: '南通',
+				children: [{
+						value: 788,
+						label: '崇川区'
+					},
+					{
+						value: 789,
+						label: '港闸区'
+					},
+					{
+						value: 790,
+						label: '海安县'
+					},
+					{
+						value: 791,
+						label: '如东县'
+					},
+					{
+						value: 792,
+						label: '启东'
+					},
+					{
+						value: 793,
+						label: '如皋'
+					},
+					{
+						value: 794,
+						label: '通州'
+					},
+					{
+						value: 795,
+						label: '海门'
+					}
+				]
+			},
+			{
+				value: 80,
+				label: '连云港',
+				children: [{
+						value: 796,
+						label: '连云区'
+					},
+					{
+						value: 797,
+						label: '新浦区'
+					},
+					{
+						value: 798,
+						label: '海州区'
+					},
+					{
+						value: 799,
+						label: '赣榆县'
+					},
+					{
+						value: 800,
+						label: '东海县'
+					},
+					{
+						value: 801,
+						label: '灌云县'
+					},
+					{
+						value: 802,
+						label: '灌南县'
+					}
+				]
+			},
+			{
+				value: 81,
+				label: '淮安',
+				children: [{
+						value: 803,
+						label: '清河区'
+					},
+					{
+						value: 804,
+						label: '楚州区'
+					},
+					{
+						value: 805,
+						label: '淮阴区'
+					},
+					{
+						value: 806,
+						label: '清浦区'
+					},
+					{
+						value: 807,
+						label: '涟水县'
+					},
+					{
+						value: 808,
+						label: '洪泽县'
+					},
+					{
+						value: 809,
+						label: '盱眙县'
+					},
+					{
+						value: 810,
+						label: '金湖县'
+					}
+				]
+			},
+			{
+				value: 82,
+				label: '盐城',
+				children: [{
+						value: 811,
+						label: '亭湖区'
+					},
+					{
+						value: 812,
+						label: '盐都区'
+					},
+					{
+						value: 813,
+						label: '响水县'
+					},
+					{
+						value: 814,
+						label: '滨海县'
+					},
+					{
+						value: 815,
+						label: '阜宁县'
+					},
+					{
+						value: 816,
+						label: '射阳县'
+					},
+					{
+						value: 817,
+						label: '建湖县'
+					},
+					{
+						value: 818,
+						label: '东台'
+					},
+					{
+						value: 819,
+						label: '大丰'
+					}
+				]
+			},
+			{
+				value: 83,
+				label: '扬州',
+				children: [{
+						value: 820,
+						label: '广陵区'
+					},
+					{
+						value: 821,
+						label: '邗江区'
+					},
+					{
+						value: 822,
+						label: '维扬区'
+					},
+					{
+						value: 823,
+						label: '宝应县'
+					},
+					{
+						value: 824,
+						label: '仪征'
+					},
+					{
+						value: 825,
+						label: '高邮'
+					},
+					{
+						value: 826,
+						label: '江都'
+					}
+				]
+			},
+			{
+				value: 84,
+				label: '镇江',
+				children: [{
+						value: 827,
+						label: '京口区'
+					},
+					{
+						value: 828,
+						label: '润州区'
+					},
+					{
+						value: 829,
+						label: '丹徒区'
+					},
+					{
+						value: 830,
+						label: '丹阳'
+					},
+					{
+						value: 831,
+						label: '扬中'
+					},
+					{
+						value: 832,
+						label: '句容'
+					}
+				]
+			},
+			{
+				value: 85,
+				label: '泰州',
+				children: [{
+						value: 833,
+						label: '海陵区'
+					},
+					{
+						value: 834,
+						label: '高港区'
+					},
+					{
+						value: 835,
+						label: '兴化'
+					},
+					{
+						value: 836,
+						label: '靖江'
+					},
+					{
+						value: 837,
+						label: '泰兴'
+					},
+					{
+						value: 838,
+						label: '姜堰'
+					}
+				]
+			},
+			{
+				value: 86,
+				label: '宿迁',
+				children: [{
+						value: 839,
+						label: '宿城区'
+					},
+					{
+						value: 840,
+						label: '宿豫区'
+					},
+					{
+						value: 841,
+						label: '沭阳县'
+					},
+					{
+						value: 842,
+						label: '泗阳县'
+					},
+					{
+						value: 843,
+						label: '泗洪县'
+					}
+				]
+			}
+		]
+	},
+	{
+		value: 11,
+		label: '浙江',
+		children: [{
+				value: 87,
+				label: '杭州',
+				children: [{
+						value: 844,
+						label: '上城区'
+					},
+					{
+						value: 845,
+						label: '下城区'
+					},
+					{
+						value: 846,
+						label: '江干区'
+					},
+					{
+						value: 847,
+						label: '拱墅区'
+					},
+					{
+						value: 848,
+						label: '西湖区'
+					},
+					{
+						value: 849,
+						label: '滨江区'
+					},
+					{
+						value: 850,
+						label: '萧山区'
+					},
+					{
+						value: 851,
+						label: '余杭区'
+					},
+					{
+						value: 852,
+						label: '桐庐县'
+					},
+					{
+						value: 853,
+						label: '淳安县'
+					},
+					{
+						value: 854,
+						label: '建德'
+					},
+					{
+						value: 855,
+						label: '富阳'
+					},
+					{
+						value: 856,
+						label: '临安'
+					}
+				]
+			},
+			{
+				value: 88,
+				label: '宁波',
+				children: [{
+						value: 857,
+						label: '海曙区'
+					},
+					{
+						value: 858,
+						label: '江东区'
+					},
+					{
+						value: 859,
+						label: '江北区'
+					},
+					{
+						value: 860,
+						label: '北仑区'
+					},
+					{
+						value: 861,
+						label: '镇海区'
+					},
+					{
+						value: 862,
+						label: '鄞州区'
+					},
+					{
+						value: 863,
+						label: '象山县'
+					},
+					{
+						value: 864,
+						label: '宁海县'
+					},
+					{
+						value: 865,
+						label: '余姚'
+					},
+					{
+						value: 866,
+						label: '慈溪'
+					},
+					{
+						value: 867,
+						label: '奉化'
+					}
+				]
+			},
+			{
+				value: 89,
+				label: '温州',
+				children: [{
+						value: 868,
+						label: '鹿城区'
+					},
+					{
+						value: 869,
+						label: '龙湾区'
+					},
+					{
+						value: 870,
+						label: '瓯海区'
+					},
+					{
+						value: 871,
+						label: '洞头县'
+					},
+					{
+						value: 872,
+						label: '永嘉县'
+					},
+					{
+						value: 873,
+						label: '平阳县'
+					},
+					{
+						value: 874,
+						label: '苍南县'
+					},
+					{
+						value: 875,
+						label: '文成县'
+					},
+					{
+						value: 876,
+						label: '泰顺县'
+					},
+					{
+						value: 877,
+						label: '瑞安'
+					},
+					{
+						value: 878,
+						label: '乐清'
+					}
+				]
+			},
+			{
+				value: 90,
+				label: '嘉兴',
+				children: [{
+						value: 879,
+						label: '秀城区'
+					},
+					{
+						value: 880,
+						label: '秀洲区'
+					},
+					{
+						value: 881,
+						label: '嘉善县'
+					},
+					{
+						value: 882,
+						label: '海盐县'
+					},
+					{
+						value: 883,
+						label: '海宁'
+					},
+					{
+						value: 884,
+						label: '平湖'
+					},
+					{
+						value: 885,
+						label: '桐乡'
+					}
+				]
+			},
+			{
+				value: 91,
+				label: '湖州',
+				children: [{
+						value: 886,
+						label: '吴兴区'
+					},
+					{
+						value: 887,
+						label: '南浔区'
+					},
+					{
+						value: 888,
+						label: '德清县'
+					},
+					{
+						value: 889,
+						label: '长兴县'
+					},
+					{
+						value: 890,
+						label: '安吉县'
+					}
+				]
+			},
+			{
+				value: 92,
+				label: '绍兴',
+				children: [{
+						value: 891,
+						label: '越城区'
+					},
+					{
+						value: 892,
+						label: '绍兴县'
+					},
+					{
+						value: 893,
+						label: '新昌县'
+					},
+					{
+						value: 894,
+						label: '诸暨'
+					},
+					{
+						value: 895,
+						label: '上虞'
+					},
+					{
+						value: 896,
+						label: '嵊州'
+					}
+				]
+			},
+			{
+				value: 93,
+				label: '金华',
+				children: [{
+						value: 897,
+						label: '婺城区'
+					},
+					{
+						value: 898,
+						label: '金东区'
+					},
+					{
+						value: 899,
+						label: '武义县'
+					},
+					{
+						value: 900,
+						label: '浦江县'
+					},
+					{
+						value: 901,
+						label: '磐安县'
+					},
+					{
+						value: 902,
+						label: '兰溪'
+					},
+					{
+						value: 903,
+						label: '义乌'
+					},
+					{
+						value: 904,
+						label: '东阳'
+					},
+					{
+						value: 905,
+						label: '永康'
+					}
+				]
+			},
+			{
+				value: 94,
+				label: '衢州',
+				children: [{
+						value: 906,
+						label: '柯城区'
+					},
+					{
+						value: 907,
+						label: '衢江区'
+					},
+					{
+						value: 908,
+						label: '常山县'
+					},
+					{
+						value: 909,
+						label: '开化县'
+					},
+					{
+						value: 910,
+						label: '龙游县'
+					},
+					{
+						value: 911,
+						label: '江山'
+					}
+				]
+			},
+			{
+				value: 95,
+				label: '舟山',
+				children: [{
+						value: 912,
+						label: '定海区'
+					},
+					{
+						value: 913,
+						label: '普陀区'
+					},
+					{
+						value: 914,
+						label: '岱山县'
+					},
+					{
+						value: 915,
+						label: '嵊泗县'
+					}
+				]
+			},
+			{
+				value: 96,
+				label: '台州',
+				children: [{
+						value: 916,
+						label: '椒江区'
+					},
+					{
+						value: 917,
+						label: '黄岩区'
+					},
+					{
+						value: 918,
+						label: '路桥区'
+					},
+					{
+						value: 919,
+						label: '玉环县'
+					},
+					{
+						value: 920,
+						label: '三门县'
+					},
+					{
+						value: 921,
+						label: '天台县'
+					},
+					{
+						value: 922,
+						label: '仙居县'
+					},
+					{
+						value: 923,
+						label: '温岭'
+					},
+					{
+						value: 924,
+						label: '临海'
+					}
+				]
+			},
+			{
+				value: 97,
+				label: '丽水',
+				children: [{
+						value: 925,
+						label: '莲都区'
+					},
+					{
+						value: 926,
+						label: '青田县'
+					},
+					{
+						value: 927,
+						label: '缙云县'
+					},
+					{
+						value: 928,
+						label: '遂昌县'
+					},
+					{
+						value: 929,
+						label: '松阳县'
+					},
+					{
+						value: 930,
+						label: '云和县'
+					},
+					{
+						value: 931,
+						label: '庆元县'
+					},
+					{
+						value: 932,
+						label: '景宁畲族自治县'
+					},
+					{
+						value: 933,
+						label: '龙泉'
+					}
+				]
+			}
+		]
+	},
+	{
+		value: 12,
+		label: '安徽',
+		children: [{
+				value: 98,
+				label: '合肥',
+				children: [{
+						value: 934,
+						label: '瑶海区'
+					},
+					{
+						value: 935,
+						label: '庐阳区'
+					},
+					{
+						value: 936,
+						label: '蜀山区'
+					},
+					{
+						value: 937,
+						label: '包河区'
+					},
+					{
+						value: 938,
+						label: '长丰县'
+					},
+					{
+						value: 939,
+						label: '肥东县'
+					},
+					{
+						value: 940,
+						label: '肥西县'
+					}
+				]
+			},
+			{
+				value: 99,
+				label: '芜湖',
+				children: [{
+						value: 941,
+						label: '镜湖区'
+					},
+					{
+						value: 942,
+						label: '马塘区'
+					},
+					{
+						value: 943,
+						label: '新芜区'
+					},
+					{
+						value: 944,
+						label: '弋江区'
+					},
+					{
+						value: 945,
+						label: '芜湖县'
+					},
+					{
+						value: 946,
+						label: '繁昌县'
+					},
+					{
+						value: 947,
+						label: '南陵县'
+					}
+				]
+			},
+			{
+				value: 100,
+				label: '蚌埠',
+				children: [{
+						value: 948,
+						label: '龙子湖区'
+					},
+					{
+						value: 949,
+						label: '蚌山区'
+					},
+					{
+						value: 950,
+						label: '禹会区'
+					},
+					{
+						value: 951,
+						label: '淮上区'
+					},
+					{
+						value: 952,
+						label: '怀远县'
+					},
+					{
+						value: 953,
+						label: '五河县'
+					},
+					{
+						value: 954,
+						label: '固镇县'
+					}
+				]
+			},
+			{
+				value: 101,
+				label: '淮南',
+				children: [{
+						value: 955,
+						label: '大通区'
+					},
+					{
+						value: 956,
+						label: '田家庵区'
+					},
+					{
+						value: 957,
+						label: '谢家集区'
+					},
+					{
+						value: 958,
+						label: '八公山区'
+					},
+					{
+						value: 959,
+						label: '潘集区'
+					},
+					{
+						value: 960,
+						label: '凤台县'
+					}
+				]
+			},
+			{
+				value: 102,
+				label: '马鞍山',
+				children: [{
+						value: 961,
+						label: '金家庄区'
+					},
+					{
+						value: 962,
+						label: '花山区'
+					},
+					{
+						value: 963,
+						label: '雨山区'
+					},
+					{
+						value: 964,
+						label: '当涂县'
+					}
+				]
+			},
+			{
+				value: 103,
+				label: '淮北',
+				children: [{
+						value: 965,
+						label: '杜集区'
+					},
+					{
+						value: 966,
+						label: '相山区'
+					},
+					{
+						value: 967,
+						label: '烈山区'
+					},
+					{
+						value: 968,
+						label: '濉溪县'
+					}
+				]
+			},
+			{
+				value: 104,
+				label: '铜陵',
+				children: [{
+						value: 969,
+						label: '铜官山区'
+					},
+					{
+						value: 970,
+						label: '狮子山区'
+					},
+					{
+						value: 971,
+						label: '郊区'
+					},
+					{
+						value: 972,
+						label: '铜陵县'
+					}
+				]
+			},
+			{
+				value: 105,
+				label: '安庆',
+				children: [{
+						value: 973,
+						label: '迎江区'
+					},
+					{
+						value: 974,
+						label: '大观区'
+					},
+					{
+						value: 975,
+						label: '郊区'
+					},
+					{
+						value: 976,
+						label: '怀宁县'
+					},
+					{
+						value: 977,
+						label: '枞阳县'
+					},
+					{
+						value: 978,
+						label: '潜山县'
+					},
+					{
+						value: 979,
+						label: '太湖县'
+					},
+					{
+						value: 980,
+						label: '宿松县'
+					},
+					{
+						value: 981,
+						label: '望江县'
+					},
+					{
+						value: 982,
+						label: '岳西县'
+					},
+					{
+						value: 983,
+						label: '桐城'
+					}
+				]
+			},
+			{
+				value: 106,
+				label: '黄山',
+				children: [{
+						value: 984,
+						label: '屯溪区'
+					},
+					{
+						value: 985,
+						label: '黄山区'
+					},
+					{
+						value: 986,
+						label: '徽州区'
+					},
+					{
+						value: 987,
+						label: '歙县'
+					},
+					{
+						value: 988,
+						label: '休宁县'
+					},
+					{
+						value: 989,
+						label: '黟县'
+					},
+					{
+						value: 990,
+						label: '祁门县'
+					}
+				]
+			},
+			{
+				value: 107,
+				label: '滁州',
+				children: [{
+						value: 991,
+						label: '琅琊区'
+					},
+					{
+						value: 992,
+						label: '南谯区'
+					},
+					{
+						value: 993,
+						label: '来安县'
+					},
+					{
+						value: 994,
+						label: '全椒县'
+					},
+					{
+						value: 995,
+						label: '定远县'
+					},
+					{
+						value: 996,
+						label: '凤阳县'
+					},
+					{
+						value: 997,
+						label: '天长'
+					},
+					{
+						value: 998,
+						label: '明光'
+					}
+				]
+			},
+			{
+				value: 108,
+				label: '阜阳',
+				children: [{
+						value: 999,
+						label: '颍州区'
+					},
+					{
+						value: 1000,
+						label: '颍东区'
+					},
+					{
+						value: 1001,
+						label: '颍泉区'
+					},
+					{
+						value: 1002,
+						label: '临泉县'
+					},
+					{
+						value: 1003,
+						label: '太和县'
+					},
+					{
+						value: 1004,
+						label: '阜南县'
+					},
+					{
+						value: 1005,
+						label: '颍上县'
+					},
+					{
+						value: 1006,
+						label: '界首'
+					}
+				]
+			},
+			{
+				value: 109,
+				label: '宿州',
+				children: [{
+						value: 1007,
+						label: '埇桥区'
+					},
+					{
+						value: 1008,
+						label: '砀山县'
+					},
+					{
+						value: 1009,
+						label: '萧县'
+					},
+					{
+						value: 1010,
+						label: '灵璧县'
+					},
+					{
+						value: 1011,
+						label: '泗县'
+					}
+				]
+			},
+			{
+				value: 110,
+				label: '巢湖',
+				children: [{
+						value: 1012,
+						label: '居巢区'
+					},
+					{
+						value: 1013,
+						label: '庐江县'
+					},
+					{
+						value: 1014,
+						label: '无为县'
+					},
+					{
+						value: 1015,
+						label: '含山县'
+					},
+					{
+						value: 1016,
+						label: '和县'
+					}
+				]
+			},
+			{
+				value: 111,
+				label: '六安',
+				children: [{
+						value: 1017,
+						label: '金安区'
+					},
+					{
+						value: 1018,
+						label: '裕安区'
+					},
+					{
+						value: 1019,
+						label: '寿县'
+					},
+					{
+						value: 1020,
+						label: '霍邱县'
+					},
+					{
+						value: 1021,
+						label: '舒城县'
+					},
+					{
+						value: 1022,
+						label: '金寨县'
+					},
+					{
+						value: 1023,
+						label: '霍山县'
+					}
+				]
+			},
+			{
+				value: 112,
+				label: '亳州',
+				children: [{
+						value: 1024,
+						label: '谯城区'
+					},
+					{
+						value: 1025,
+						label: '涡阳县'
+					},
+					{
+						value: 1026,
+						label: '蒙城县'
+					},
+					{
+						value: 1027,
+						label: '利辛县'
+					}
+				]
+			},
+			{
+				value: 113,
+				label: '池州',
+				children: [{
+						value: 1028,
+						label: '贵池区'
+					},
+					{
+						value: 1029,
+						label: '东至县'
+					},
+					{
+						value: 1030,
+						label: '石台县'
+					},
+					{
+						value: 1031,
+						label: '青阳县'
+					}
+				]
+			},
+			{
+				value: 114,
+				label: '宣城',
+				children: [{
+						value: 1032,
+						label: '宣州区'
+					},
+					{
+						value: 1033,
+						label: '郎溪县'
+					},
+					{
+						value: 1034,
+						label: '广德县'
+					},
+					{
+						value: 1035,
+						label: '泾县'
+					},
+					{
+						value: 1036,
+						label: '绩溪县'
+					},
+					{
+						value: 1037,
+						label: '旌德县'
+					},
+					{
+						value: 1038,
+						label: '宁国'
+					}
+				]
+			}
+		]
+	},
+	{
+		value: 13,
+		label: '福建',
+		children: [{
+				value: 115,
+				label: '福州',
+				children: [{
+						value: 1039,
+						label: '鼓楼区'
+					},
+					{
+						value: 1040,
+						label: '台江区'
+					},
+					{
+						value: 1041,
+						label: '仓山区'
+					},
+					{
+						value: 1042,
+						label: '马尾区'
+					},
+					{
+						value: 1043,
+						label: '晋安区'
+					},
+					{
+						value: 1044,
+						label: '闽侯县'
+					},
+					{
+						value: 1045,
+						label: '连江县'
+					},
+					{
+						value: 1046,
+						label: '罗源县'
+					},
+					{
+						value: 1047,
+						label: '闽清县'
+					},
+					{
+						value: 1048,
+						label: '永泰县'
+					},
+					{
+						value: 1049,
+						label: '平潭县'
+					},
+					{
+						value: 1050,
+						label: '福清'
+					},
+					{
+						value: 1051,
+						label: '长乐'
+					}
+				]
+			},
+			{
+				value: 116,
+				label: '厦门',
+				children: [{
+						value: 1052,
+						label: '思明区'
+					},
+					{
+						value: 1053,
+						label: '海沧区'
+					},
+					{
+						value: 1054,
+						label: '湖里区'
+					},
+					{
+						value: 1055,
+						label: '集美区'
+					},
+					{
+						value: 1056,
+						label: '同安区'
+					},
+					{
+						value: 1057,
+						label: '翔安区'
+					}
+				]
+			},
+			{
+				value: 117,
+				label: '莆田',
+				children: [{
+						value: 1058,
+						label: '城厢区'
+					},
+					{
+						value: 1059,
+						label: '涵江区'
+					},
+					{
+						value: 1060,
+						label: '荔城区'
+					},
+					{
+						value: 1061,
+						label: '秀屿区'
+					},
+					{
+						value: 1062,
+						label: '仙游县'
+					}
+				]
+			},
+			{
+				value: 118,
+				label: '三明',
+				children: [{
+						value: 1063,
+						label: '梅列区'
+					},
+					{
+						value: 1064,
+						label: '三元区'
+					},
+					{
+						value: 1065,
+						label: '明溪县'
+					},
+					{
+						value: 1066,
+						label: '清流县'
+					},
+					{
+						value: 1067,
+						label: '宁化县'
+					},
+					{
+						value: 1068,
+						label: '大田县'
+					},
+					{
+						value: 1069,
+						label: '尤溪县'
+					},
+					{
+						value: 1070,
+						label: '沙县'
+					},
+					{
+						value: 1071,
+						label: '将乐县'
+					},
+					{
+						value: 1072,
+						label: '泰宁县'
+					},
+					{
+						value: 1073,
+						label: '建宁县'
+					},
+					{
+						value: 1074,
+						label: '永安'
+					}
+				]
+			},
+			{
+				value: 119,
+				label: '泉州',
+				children: [{
+						value: 1075,
+						label: '鲤城区'
+					},
+					{
+						value: 1076,
+						label: '丰泽区'
+					},
+					{
+						value: 1077,
+						label: '洛江区'
+					},
+					{
+						value: 1078,
+						label: '泉港区'
+					},
+					{
+						value: 1079,
+						label: '惠安县'
+					},
+					{
+						value: 1080,
+						label: '安溪县'
+					},
+					{
+						value: 1081,
+						label: '永春县'
+					},
+					{
+						value: 1082,
+						label: '德化县'
+					},
+					{
+						value: 1083,
+						label: '金门县'
+					},
+					{
+						value: 1084,
+						label: '石狮'
+					},
+					{
+						value: 1085,
+						label: '晋江'
+					},
+					{
+						value: 1086,
+						label: '南安'
+					}
+				]
+			},
+			{
+				value: 120,
+				label: '漳州',
+				children: [{
+						value: 1087,
+						label: '芗城区'
+					},
+					{
+						value: 1088,
+						label: '龙文区'
+					},
+					{
+						value: 1089,
+						label: '云霄县'
+					},
+					{
+						value: 1090,
+						label: '漳浦县'
+					},
+					{
+						value: 1091,
+						label: '诏安县'
+					},
+					{
+						value: 1092,
+						label: '长泰县'
+					},
+					{
+						value: 1093,
+						label: '东山县'
+					},
+					{
+						value: 1094,
+						label: '南靖县'
+					},
+					{
+						value: 1095,
+						label: '平和县'
+					},
+					{
+						value: 1096,
+						label: '华安县'
+					},
+					{
+						value: 1097,
+						label: '龙海'
+					}
+				]
+			},
+			{
+				value: 121,
+				label: '南平',
+				children: [{
+						value: 1098,
+						label: '延平区'
+					},
+					{
+						value: 1099,
+						label: '顺昌县'
+					},
+					{
+						value: 1100,
+						label: '浦城县'
+					},
+					{
+						value: 1101,
+						label: '光泽县'
+					},
+					{
+						value: 1102,
+						label: '松溪县'
+					},
+					{
+						value: 1103,
+						label: '政和县'
+					},
+					{
+						value: 1104,
+						label: '邵武'
+					},
+					{
+						value: 1105,
+						label: '武夷山'
+					},
+					{
+						value: 1106,
+						label: '建瓯'
+					},
+					{
+						value: 1107,
+						label: '建阳'
+					}
+				]
+			},
+			{
+				value: 122,
+				label: '龙岩',
+				children: [{
+						value: 1108,
+						label: '新罗区'
+					},
+					{
+						value: 1109,
+						label: '长汀县'
+					},
+					{
+						value: 1110,
+						label: '永定县'
+					},
+					{
+						value: 1111,
+						label: '上杭县'
+					},
+					{
+						value: 1112,
+						label: '武平县'
+					},
+					{
+						value: 1113,
+						label: '连城县'
+					},
+					{
+						value: 1114,
+						label: '漳平'
+					}
+				]
+			},
+			{
+				value: 123,
+				label: '宁德',
+				children: [{
+						value: 1115,
+						label: '蕉城区'
+					},
+					{
+						value: 1116,
+						label: '霞浦县'
+					},
+					{
+						value: 1117,
+						label: '古田县'
+					},
+					{
+						value: 1118,
+						label: '屏南县'
+					},
+					{
+						value: 1119,
+						label: '寿宁县'
+					},
+					{
+						value: 1120,
+						label: '周宁县'
+					},
+					{
+						value: 1121,
+						label: '柘荣县'
+					},
+					{
+						value: 1122,
+						label: '福安'
+					},
+					{
+						value: 1123,
+						label: '福鼎'
+					}
+				]
+			}
+		]
+	},
+	{
+		value: 14,
+		label: '江西',
+		children: [{
+				value: 124,
+				label: '南昌',
+				children: [{
+						value: 1124,
+						label: '东湖区'
+					},
+					{
+						value: 1125,
+						label: '西湖区'
+					},
+					{
+						value: 1126,
+						label: '青云谱区'
+					},
+					{
+						value: 1127,
+						label: '湾里区'
+					},
+					{
+						value: 1128,
+						label: '青山湖区'
+					},
+					{
+						value: 1129,
+						label: '南昌县'
+					},
+					{
+						value: 1130,
+						label: '新建县'
+					},
+					{
+						value: 1131,
+						label: '安义县'
+					},
+					{
+						value: 1132,
+						label: '进贤县'
+					}
+				]
+			},
+			{
+				value: 125,
+				label: '景德镇',
+				children: [{
+						value: 1133,
+						label: '昌江区'
+					},
+					{
+						value: 1134,
+						label: '珠山区'
+					},
+					{
+						value: 1135,
+						label: '浮梁县'
+					},
+					{
+						value: 1136,
+						label: '乐平'
+					}
+				]
+			},
+			{
+				value: 126,
+				label: '萍乡',
+				children: [{
+						value: 1137,
+						label: '安源区'
+					},
+					{
+						value: 1138,
+						label: '湘东区'
+					},
+					{
+						value: 1139,
+						label: '莲花县'
+					},
+					{
+						value: 1140,
+						label: '上栗县'
+					},
+					{
+						value: 1141,
+						label: '芦溪县'
+					}
+				]
+			},
+			{
+				value: 127,
+				label: '九江',
+				children: [{
+						value: 1142,
+						label: '庐山区'
+					},
+					{
+						value: 1143,
+						label: '浔阳区'
+					},
+					{
+						value: 1144,
+						label: '九江县'
+					},
+					{
+						value: 1145,
+						label: '武宁县'
+					},
+					{
+						value: 1146,
+						label: '修水县'
+					},
+					{
+						value: 1147,
+						label: '永修县'
+					},
+					{
+						value: 1148,
+						label: '德安县'
+					},
+					{
+						value: 1149,
+						label: '星子县'
+					},
+					{
+						value: 1150,
+						label: '都昌县'
+					},
+					{
+						value: 1151,
+						label: '湖口县'
+					},
+					{
+						value: 1152,
+						label: '彭泽县'
+					},
+					{
+						value: 1153,
+						label: '瑞昌'
+					}
+				]
+			},
+			{
+				value: 128,
+				label: '新余',
+				children: [{
+						value: 1154,
+						label: '渝水区'
+					},
+					{
+						value: 1155,
+						label: '分宜县'
+					}
+				]
+			},
+			{
+				value: 129,
+				label: '鹰潭',
+				children: [{
+						value: 1156,
+						label: '月湖区'
+					},
+					{
+						value: 1157,
+						label: '余江县'
+					},
+					{
+						value: 1158,
+						label: '贵溪'
+					}
+				]
+			},
+			{
+				value: 130,
+				label: '赣州',
+				children: [{
+						value: 1159,
+						label: '章贡区'
+					},
+					{
+						value: 1160,
+						label: '赣县'
+					},
+					{
+						value: 1161,
+						label: '信丰县'
+					},
+					{
+						value: 1162,
+						label: '大余县'
+					},
+					{
+						value: 1163,
+						label: '上犹县'
+					},
+					{
+						value: 1164,
+						label: '崇义县'
+					},
+					{
+						value: 1165,
+						label: '安远县'
+					},
+					{
+						value: 1166,
+						label: '龙南县'
+					},
+					{
+						value: 1167,
+						label: '定南县'
+					},
+					{
+						value: 1168,
+						label: '全南县'
+					},
+					{
+						value: 1169,
+						label: '宁都县'
+					},
+					{
+						value: 1170,
+						label: '于都县'
+					},
+					{
+						value: 1171,
+						label: '兴国县'
+					},
+					{
+						value: 1172,
+						label: '会昌县'
+					},
+					{
+						value: 1173,
+						label: '寻乌县'
+					},
+					{
+						value: 1174,
+						label: '石城县'
+					},
+					{
+						value: 1175,
+						label: '瑞金'
+					},
+					{
+						value: 1176,
+						label: '南康'
+					}
+				]
+			},
+			{
+				value: 131,
+				label: '吉安',
+				children: [{
+						value: 1177,
+						label: '吉州区'
+					},
+					{
+						value: 1178,
+						label: '青原区'
+					},
+					{
+						value: 1179,
+						label: '吉安县'
+					},
+					{
+						value: 1180,
+						label: '吉水县'
+					},
+					{
+						value: 1181,
+						label: '峡江县'
+					},
+					{
+						value: 1182,
+						label: '新干县'
+					},
+					{
+						value: 1183,
+						label: '永丰县'
+					},
+					{
+						value: 1184,
+						label: '泰和县'
+					},
+					{
+						value: 1185,
+						label: '遂川县'
+					},
+					{
+						value: 1186,
+						label: '万安县'
+					},
+					{
+						value: 1187,
+						label: '安福县'
+					},
+					{
+						value: 1188,
+						label: '永新县'
+					},
+					{
+						value: 1189,
+						label: '井冈山'
+					}
+				]
+			},
+			{
+				value: 132,
+				label: '宜春',
+				children: [{
+						value: 1190,
+						label: '袁州区'
+					},
+					{
+						value: 1191,
+						label: '奉新县'
+					},
+					{
+						value: 1192,
+						label: '万载县'
+					},
+					{
+						value: 1193,
+						label: '上高县'
+					},
+					{
+						value: 1194,
+						label: '宜丰县'
+					},
+					{
+						value: 1195,
+						label: '靖安县'
+					},
+					{
+						value: 1196,
+						label: '铜鼓县'
+					},
+					{
+						value: 1197,
+						label: '丰城'
+					},
+					{
+						value: 1198,
+						label: '樟树'
+					},
+					{
+						value: 1199,
+						label: '高安'
+					}
+				]
+			},
+			{
+				value: 133,
+				label: '抚州',
+				children: [{
+						value: 1200,
+						label: '临川区'
+					},
+					{
+						value: 1201,
+						label: '南城县'
+					},
+					{
+						value: 1202,
+						label: '黎川县'
+					},
+					{
+						value: 1203,
+						label: '南丰县'
+					},
+					{
+						value: 1204,
+						label: '崇仁县'
+					},
+					{
+						value: 1205,
+						label: '乐安县'
+					},
+					{
+						value: 1206,
+						label: '宜黄县'
+					},
+					{
+						value: 1207,
+						label: '金溪县'
+					},
+					{
+						value: 1208,
+						label: '资溪县'
+					},
+					{
+						value: 1209,
+						label: '东乡县'
+					},
+					{
+						value: 1210,
+						label: '广昌县'
+					}
+				]
+			},
+			{
+				value: 134,
+				label: '上饶',
+				children: [{
+						value: 1211,
+						label: '信州区'
+					},
+					{
+						value: 1212,
+						label: '上饶县'
+					},
+					{
+						value: 1213,
+						label: '广丰县'
+					},
+					{
+						value: 1214,
+						label: '玉山县'
+					},
+					{
+						value: 1215,
+						label: '铅山县'
+					},
+					{
+						value: 1216,
+						label: '横峰县'
+					},
+					{
+						value: 1217,
+						label: '弋阳县'
+					},
+					{
+						value: 1218,
+						label: '余干县'
+					},
+					{
+						value: 1219,
+						label: '鄱阳县'
+					},
+					{
+						value: 1220,
+						label: '万年县'
+					},
+					{
+						value: 1221,
+						label: '婺源县'
+					},
+					{
+						value: 1222,
+						label: '德兴'
+					}
+				]
+			}
+		]
+	},
+	{
+		value: 15,
+		label: '山东',
+		children: [{
+				value: 135,
+				label: '济南',
+				children: [{
+						value: 1223,
+						label: '历下区'
+					},
+					{
+						value: 1224,
+						label: '中区'
+					},
+					{
+						value: 1225,
+						label: '槐荫区'
+					},
+					{
+						value: 1226,
+						label: '天桥区'
+					},
+					{
+						value: 1227,
+						label: '历城区'
+					},
+					{
+						value: 1228,
+						label: '长清区'
+					},
+					{
+						value: 1229,
+						label: '平阴县'
+					},
+					{
+						value: 1230,
+						label: '济阳县'
+					},
+					{
+						value: 1231,
+						label: '商河县'
+					},
+					{
+						value: 1232,
+						label: '章丘'
+					}
+				]
+			},
+			{
+				value: 136,
+				label: '青岛',
+				children: [{
+						value: 1233,
+						label: '南区'
+					},
+					{
+						value: 1234,
+						label: '北区'
+					},
+					{
+						value: 1235,
+						label: '四方区'
+					},
+					{
+						value: 1236,
+						label: '黄岛区'
+					},
+					{
+						value: 1237,
+						label: '崂山区'
+					},
+					{
+						value: 1238,
+						label: '李沧区'
+					},
+					{
+						value: 1239,
+						label: '城阳区'
+					},
+					{
+						value: 1240,
+						label: '胶州'
+					},
+					{
+						value: 1241,
+						label: '即墨'
+					},
+					{
+						value: 1242,
+						label: '平度'
+					},
+					{
+						value: 1243,
+						label: '胶南'
+					},
+					{
+						value: 1244,
+						label: '莱西'
+					}
+				]
+			},
+			{
+				value: 137,
+				label: '淄博',
+				children: [{
+						value: 1245,
+						label: '淄川区'
+					},
+					{
+						value: 1246,
+						label: '张店区'
+					},
+					{
+						value: 1247,
+						label: '博山区'
+					},
+					{
+						value: 1248,
+						label: '临淄区'
+					},
+					{
+						value: 1249,
+						label: '周村区'
+					},
+					{
+						value: 1250,
+						label: '桓台县'
+					},
+					{
+						value: 1251,
+						label: '高青县'
+					},
+					{
+						value: 1252,
+						label: '沂源县'
+					}
+				]
+			},
+			{
+				value: 138,
+				label: '枣庄',
+				children: [{
+						value: 1253,
+						label: '中区'
+					},
+					{
+						value: 1254,
+						label: '薛城区'
+					},
+					{
+						value: 1255,
+						label: '峄城区'
+					},
+					{
+						value: 1256,
+						label: '台儿庄区'
+					},
+					{
+						value: 1257,
+						label: '山亭区'
+					},
+					{
+						value: 1258,
+						label: '滕州'
+					}
+				]
+			},
+			{
+				value: 139,
+				label: '东营',
+				children: [{
+						value: 1259,
+						label: '东营区'
+					},
+					{
+						value: 1260,
+						label: '河口区'
+					},
+					{
+						value: 1261,
+						label: '垦利县'
+					},
+					{
+						value: 1262,
+						label: '利津县'
+					},
+					{
+						value: 1263,
+						label: '广饶县'
+					}
+				]
+			},
+			{
+				value: 140,
+				label: '烟台',
+				children: [{
+						value: 1264,
+						label: '芝罘区'
+					},
+					{
+						value: 1265,
+						label: '福山区'
+					},
+					{
+						value: 1266,
+						label: '牟平区'
+					},
+					{
+						value: 1267,
+						label: '莱山区'
+					},
+					{
+						value: 1268,
+						label: '长岛县'
+					},
+					{
+						value: 1269,
+						label: '龙口'
+					},
+					{
+						value: 1270,
+						label: '莱阳'
+					},
+					{
+						value: 1271,
+						label: '莱州'
+					},
+					{
+						value: 1272,
+						label: '蓬莱'
+					},
+					{
+						value: 1273,
+						label: '招远'
+					},
+					{
+						value: 1274,
+						label: '栖霞'
+					},
+					{
+						value: 1275,
+						label: '海阳'
+					}
+				]
+			},
+			{
+				value: 141,
+				label: '潍坊',
+				children: [{
+						value: 1276,
+						label: '潍城区'
+					},
+					{
+						value: 1277,
+						label: '寒亭区'
+					},
+					{
+						value: 1278,
+						label: '坊子区'
+					},
+					{
+						value: 1279,
+						label: '奎文区'
+					},
+					{
+						value: 1280,
+						label: '临朐县'
+					},
+					{
+						value: 1281,
+						label: '昌乐县'
+					},
+					{
+						value: 1282,
+						label: '青州'
+					},
+					{
+						value: 1283,
+						label: '诸城'
+					},
+					{
+						value: 1284,
+						label: '寿光'
+					},
+					{
+						value: 1285,
+						label: '安丘'
+					},
+					{
+						value: 1286,
+						label: '高密'
+					},
+					{
+						value: 1287,
+						label: '昌邑'
+					}
+				]
+			},
+			{
+				value: 142,
+				label: '济宁',
+				children: [{
+						value: 1288,
+						label: '中区'
+					},
+					{
+						value: 1289,
+						label: '任城区'
+					},
+					{
+						value: 1290,
+						label: '微山县'
+					},
+					{
+						value: 1291,
+						label: '鱼台县'
+					},
+					{
+						value: 1292,
+						label: '金乡县'
+					},
+					{
+						value: 1293,
+						label: '嘉祥县'
+					},
+					{
+						value: 1294,
+						label: '汶上县'
+					},
+					{
+						value: 1295,
+						label: '泗水县'
+					},
+					{
+						value: 1296,
+						label: '梁山县'
+					},
+					{
+						value: 1297,
+						label: '曲阜'
+					},
+					{
+						value: 1298,
+						label: '兖州'
+					},
+					{
+						value: 1299,
+						label: '邹城'
+					}
+				]
+			},
+			{
+				value: 143,
+				label: '泰安',
+				children: [{
+						value: 1300,
+						label: '泰山区'
+					},
+					{
+						value: 1301,
+						label: '岱岳区'
+					},
+					{
+						value: 1302,
+						label: '宁阳县'
+					},
+					{
+						value: 1303,
+						label: '东平县'
+					},
+					{
+						value: 1304,
+						label: '新泰'
+					},
+					{
+						value: 1305,
+						label: '肥城'
+					}
+				]
+			},
+			{
+				value: 144,
+				label: '威海',
+				children: [{
+						value: 1306,
+						label: '环翠区'
+					},
+					{
+						value: 1307,
+						label: '文登'
+					},
+					{
+						value: 1308,
+						label: '荣成'
+					},
+					{
+						value: 1309,
+						label: '乳山'
+					}
+				]
+			},
+			{
+				value: 145,
+				label: '日照',
+				children: [{
+						value: 1310,
+						label: '东港区'
+					},
+					{
+						value: 1311,
+						label: '岚山区'
+					},
+					{
+						value: 1312,
+						label: '五莲县'
+					},
+					{
+						value: 1313,
+						label: '莒县'
+					}
+				]
+			},
+			{
+				value: 146,
+				label: '莱芜',
+				children: [{
+						value: 1314,
+						label: '莱城区'
+					},
+					{
+						value: 1315,
+						label: '钢城区'
+					}
+				]
+			},
+			{
+				value: 147,
+				label: '临沂',
+				children: [{
+						value: 1316,
+						label: '兰山区'
+					},
+					{
+						value: 1317,
+						label: '罗庄区'
+					},
+					{
+						value: 1318,
+						label: '河东区'
+					},
+					{
+						value: 1319,
+						label: '沂南县'
+					},
+					{
+						value: 1320,
+						label: '郯城县'
+					},
+					{
+						value: 1321,
+						label: '沂水县'
+					},
+					{
+						value: 1322,
+						label: '苍山县'
+					},
+					{
+						value: 1323,
+						label: '费县'
+					},
+					{
+						value: 1324,
+						label: '平邑县'
+					},
+					{
+						value: 1325,
+						label: '莒南县'
+					},
+					{
+						value: 1326,
+						label: '蒙阴县'
+					},
+					{
+						value: 1327,
+						label: '临沭县'
+					}
+				]
+			},
+			{
+				value: 148,
+				label: '德州',
+				children: [{
+						value: 1328,
+						label: '德城区'
+					},
+					{
+						value: 1329,
+						label: '陵县'
+					},
+					{
+						value: 1330,
+						label: '宁津县'
+					},
+					{
+						value: 1331,
+						label: '庆云县'
+					},
+					{
+						value: 1332,
+						label: '临邑县'
+					},
+					{
+						value: 1333,
+						label: '齐河县'
+					},
+					{
+						value: 1334,
+						label: '平原县'
+					},
+					{
+						value: 1335,
+						label: '夏津县'
+					},
+					{
+						value: 1336,
+						label: '武城县'
+					},
+					{
+						value: 1337,
+						label: '乐陵'
+					},
+					{
+						value: 1338,
+						label: '禹城'
+					}
+				]
+			},
+			{
+				value: 149,
+				label: '聊城',
+				children: [{
+						value: 1339,
+						label: '东昌府区'
+					},
+					{
+						value: 1340,
+						label: '阳谷县'
+					},
+					{
+						value: 1341,
+						label: '莘县'
+					},
+					{
+						value: 1342,
+						label: '茌平县'
+					},
+					{
+						value: 1343,
+						label: '东阿县'
+					},
+					{
+						value: 1344,
+						label: '冠县'
+					},
+					{
+						value: 1345,
+						label: '高唐县'
+					},
+					{
+						value: 1346,
+						label: '临清'
+					}
+				]
+			},
+			{
+				value: 150,
+				label: '滨州',
+				children: [{
+						value: 1347,
+						label: '滨城区'
+					},
+					{
+						value: 1348,
+						label: '惠民县'
+					},
+					{
+						value: 1349,
+						label: '阳信县'
+					},
+					{
+						value: 1350,
+						label: '无棣县'
+					},
+					{
+						value: 1351,
+						label: '沾化县'
+					},
+					{
+						value: 1352,
+						label: '博兴县'
+					},
+					{
+						value: 1353,
+						label: '邹平县'
+					}
+				]
+			},
+			{
+				value: 151,
+				label: '荷泽',
+				children: [{
+						value: 1354,
+						label: '牡丹区'
+					},
+					{
+						value: 1355,
+						label: '曹县'
+					},
+					{
+						value: 1356,
+						label: '单县'
+					},
+					{
+						value: 1357,
+						label: '成武县'
+					},
+					{
+						value: 1358,
+						label: '巨野县'
+					},
+					{
+						value: 1359,
+						label: '郓城县'
+					},
+					{
+						value: 1360,
+						label: '鄄城县'
+					},
+					{
+						value: 1361,
+						label: '定陶县'
+					},
+					{
+						value: 1362,
+						label: '东明县'
+					}
+				]
+			}
+		]
+	},
+	{
+		value: 16,
+		label: '河南',
+		children: [{
+				value: 152,
+				label: '郑州',
+				children: [{
+						value: 1363,
+						label: '中原区'
+					},
+					{
+						value: 1364,
+						label: '二七区'
+					},
+					{
+						value: 1365,
+						label: '管城回族区'
+					},
+					{
+						value: 1366,
+						label: '金水区'
+					},
+					{
+						value: 1367,
+						label: '上街区'
+					},
+					{
+						value: 1368,
+						label: '惠济区'
+					},
+					{
+						value: 1369,
+						label: '中牟县'
+					},
+					{
+						value: 1370,
+						label: '巩义'
+					},
+					{
+						value: 1371,
+						label: '荥阳'
+					},
+					{
+						value: 1372,
+						label: '新密'
+					},
+					{
+						value: 1373,
+						label: '新郑'
+					},
+					{
+						value: 1374,
+						label: '登封'
+					}
+				]
+			},
+			{
+				value: 153,
+				label: '开封',
+				children: [{
+						value: 1375,
+						label: '龙亭区'
+					},
+					{
+						value: 1376,
+						label: '顺河回族区'
+					},
+					{
+						value: 1377,
+						label: '鼓楼区'
+					},
+					{
+						value: 1378,
+						label: '南关区'
+					},
+					{
+						value: 1379,
+						label: '郊区'
+					},
+					{
+						value: 1380,
+						label: '杞县'
+					},
+					{
+						value: 1381,
+						label: '通许县'
+					},
+					{
+						value: 1382,
+						label: '尉氏县'
+					},
+					{
+						value: 1383,
+						label: '开封县'
+					},
+					{
+						value: 1384,
+						label: '兰考县'
+					}
+				]
+			},
+			{
+				value: 154,
+				label: '洛阳',
+				children: [{
+						value: 1385,
+						label: '老城区'
+					},
+					{
+						value: 1386,
+						label: '西工区'
+					},
+					{
+						value: 1387,
+						label: '廛河回族区'
+					},
+					{
+						value: 1388,
+						label: '涧西区'
+					},
+					{
+						value: 1389,
+						label: '吉利区'
+					},
+					{
+						value: 1390,
+						label: '洛龙区'
+					},
+					{
+						value: 1391,
+						label: '孟津县'
+					},
+					{
+						value: 1392,
+						label: '新安县'
+					},
+					{
+						value: 1393,
+						label: '栾川县'
+					},
+					{
+						value: 1394,
+						label: '嵩县'
+					},
+					{
+						value: 1395,
+						label: '汝阳县'
+					},
+					{
+						value: 1396,
+						label: '宜阳县'
+					},
+					{
+						value: 1397,
+						label: '洛宁县'
+					},
+					{
+						value: 1398,
+						label: '伊川县'
+					},
+					{
+						value: 1399,
+						label: '偃师'
+					}
+				]
+			},
+			{
+				value: 155,
+				label: '平顶山',
+				children: [{
+						value: 1400,
+						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: 156,
+				label: '安阳',
+				children: [{
+						value: 1410,
+						label: '文峰区'
+					},
+					{
+						value: 1411,
+						label: '北关区'
+					},
+					{
+						value: 1412,
+						label: '殷都区'
+					},
+					{
+						value: 1413,
+						label: '龙安区'
+					},
+					{
+						value: 1414,
+						label: '安阳县'
+					},
+					{
+						value: 1415,
+						label: '汤阴县'
+					},
+					{
+						value: 1416,
+						label: '滑县'
+					},
+					{
+						value: 1417,
+						label: '内黄县'
+					},
+					{
+						value: 1418,
+						label: '林州'
+					}
+				]
+			},
+			{
+				value: 157,
+				label: '鹤壁',
+				children: [{
+						value: 1419,
+						label: '鹤山区'
+					},
+					{
+						value: 1420,
+						label: '山城区'
+					},
+					{
+						value: 1421,
+						label: '淇滨区'
+					},
+					{
+						value: 1422,
+						label: '浚县'
+					},
+					{
+						value: 1423,
+						label: '淇县'
+					}
+				]
+			},
+			{
+				value: 158,
+				label: '新乡',
+				children: [{
+						value: 1424,
+						label: '红旗区'
+					},
+					{
+						value: 1425,
+						label: '卫滨区'
+					},
+					{
+						value: 1426,
+						label: '凤泉区'
+					},
+					{
+						value: 1427,
+						label: '牧野区'
+					},
+					{
+						value: 1428,
+						label: '新乡县'
+					},
+					{
+						value: 1429,
+						label: '获嘉县'
+					},
+					{
+						value: 1430,
+						label: '原阳县'
+					},
+					{
+						value: 1431,
+						label: '延津县'
+					},
+					{
+						value: 1432,
+						label: '封丘县'
+					},
+					{
+						value: 1433,
+						label: '长垣县'
+					},
+					{
+						value: 1434,
+						label: '卫辉'
+					},
+					{
+						value: 1435,
+						label: '辉县'
+					}
+				]
+			},
+			{
+				value: 159,
+				label: '焦作',
+				children: [{
+						value: 1436,
+						label: '解放区'
+					},
+					{
+						value: 1437,
+						label: '中站区'
+					},
+					{
+						value: 1438,
+						label: '马村区'
+					},
+					{
+						value: 1439,
+						label: '山阳区'
+					},
+					{
+						value: 1440,
+						label: '修武县'
+					},
+					{
+						value: 1441,
+						label: '博爱县'
+					},
+					{
+						value: 1442,
+						label: '武陟县'
+					},
+					{
+						value: 1443,
+						label: '温县'
+					},
+					{
+						value: 1444,
+						label: '济源'
+					},
+					{
+						value: 1445,
+						label: '沁阳'
+					},
+					{
+						value: 1446,
+						label: '孟州'
+					}
+				]
+			},
+			{
+				value: 160,
+				label: '濮阳',
+				children: [{
+						value: 1447,
+						label: '华龙区'
+					},
+					{
+						value: 1448,
+						label: '清丰县'
+					},
+					{
+						value: 1449,
+						label: '南乐县'
+					},
+					{
+						value: 1450,
+						label: '范县'
+					},
+					{
+						value: 1451,
+						label: '台前县'
+					},
+					{
+						value: 1452,
+						label: '濮阳县'
+					}
+				]
+			},
+			{
+				value: 161,
+				label: '许昌',
+				children: [{
+						value: 1453,
+						label: '魏都区'
+					},
+					{
+						value: 1454,
+						label: '许昌县'
+					},
+					{
+						value: 1455,
+						label: '鄢陵县'
+					},
+					{
+						value: 1456,
+						label: '襄城县'
+					},
+					{
+						value: 1457,
+						label: '禹州'
+					},
+					{
+						value: 1458,
+						label: '长葛'
+					}
+				]
+			},
+			{
+				value: 162,
+				label: '漯河',
+				children: [{
+						value: 1459,
+						label: '源汇区'
+					},
+					{
+						value: 1460,
+						label: '郾城区'
+					},
+					{
+						value: 1461,
+						label: '召陵区'
+					},
+					{
+						value: 1462,
+						label: '舞阳县'
+					},
+					{
+						value: 1463,
+						label: '临颍县'
+					}
+				]
+			},
+			{
+				value: 163,
+				label: '三门峡',
+				children: [{
+						value: 1464,
+						label: '辖区'
+					},
+					{
+						value: 1465,
+						label: '湖滨区'
+					},
+					{
+						value: 1466,
+						label: '渑池县'
+					},
+					{
+						value: 1467,
+						label: '陕县'
+					},
+					{
+						value: 1468,
+						label: '卢氏县'
+					},
+					{
+						value: 1469,
+						label: '义马'
+					},
+					{
+						value: 1470,
+						label: '灵宝'
+					}
+				]
+			},
+			{
+				value: 164,
+				label: '南阳',
+				children: [{
+						value: 1471,
+						label: '宛城区'
+					},
+					{
+						value: 1472,
+						label: '卧龙区'
+					},
+					{
+						value: 1473,
+						label: '南召县'
+					},
+					{
+						value: 1474,
+						label: '方城县'
+					},
+					{
+						value: 1475,
+						label: '西峡县'
+					},
+					{
+						value: 1476,
+						label: '镇平县'
+					},
+					{
+						value: 1477,
+						label: '内乡县'
+					},
+					{
+						value: 1478,
+						label: '淅川县'
+					},
+					{
+						value: 1479,
+						label: '社旗县'
+					},
+					{
+						value: 1480,
+						label: '唐河县'
+					},
+					{
+						value: 1481,
+						label: '新野县'
+					},
+					{
+						value: 1482,
+						label: '桐柏县'
+					},
+					{
+						value: 1483,
+						label: '邓州'
+					}
+				]
+			},
+			{
+				value: 165,
+				label: '商丘',
+				children: [{
+						value: 1484,
+						label: '梁园区'
+					},
+					{
+						value: 1485,
+						label: '睢阳区'
+					},
+					{
+						value: 1486,
+						label: '民权县'
+					},
+					{
+						value: 1487,
+						label: '睢县'
+					},
+					{
+						value: 1488,
+						label: '宁陵县'
+					},
+					{
+						value: 1489,
+						label: '柘城县'
+					},
+					{
+						value: 1490,
+						label: '虞城县'
+					},
+					{
+						value: 1491,
+						label: '夏邑县'
+					},
+					{
+						value: 1492,
+						label: '永城'
+					}
+				]
+			},
+			{
+				value: 166,
+				label: '信阳',
+				children: [{
+						value: 1493,
+						label: '浉河区'
+					},
+					{
+						value: 1494,
+						label: '平桥区'
+					},
+					{
+						value: 1495,
+						label: '罗山县'
+					},
+					{
+						value: 1496,
+						label: '光山县'
+					},
+					{
+						value: 1497,
+						label: '新县'
+					},
+					{
+						value: 1498,
+						label: '商城县'
+					},
+					{
+						value: 1499,
+						label: '固始县'
+					},
+					{
+						value: 1500,
+						label: '潢川县'
+					},
+					{
+						value: 1501,
+						label: '淮滨县'
+					},
+					{
+						value: 1502,
+						label: '息县'
+					}
+				]
+			},
+			{
+				value: 167,
+				label: '周口',
+				children: [{
+						value: 1503,
+						label: '川汇区'
+					},
+					{
+						value: 1504,
+						label: '扶沟县'
+					},
+					{
+						value: 1505,
+						label: '西华县'
+					},
+					{
+						value: 1506,
+						label: '商水县'
+					},
+					{
+						value: 1507,
+						label: '沈丘县'
+					},
+					{
+						value: 1508,
+						label: '郸城县'
+					},
+					{
+						value: 1509,
+						label: '淮阳县'
+					},
+					{
+						value: 1510,
+						label: '太康县'
+					},
+					{
+						value: 1511,
+						label: '鹿邑县'
+					},
+					{
+						value: 1512,
+						label: '项城'
+					}
+				]
+			},
+			{
+				value: 168,
+				label: '驻马店',
+				children: [{
+						value: 1513,
+						label: '驿城区'
+					},
+					{
+						value: 1514,
+						label: '西平县'
+					},
+					{
+						value: 1515,
+						label: '上蔡县'
+					},
+					{
+						value: 1516,
+						label: '平舆县'
+					},
+					{
+						value: 1517,
+						label: '正阳县'
+					},
+					{
+						value: 1518,
+						label: '确山县'
+					},
+					{
+						value: 1519,
+						label: '泌阳县'
+					},
+					{
+						value: 1520,
+						label: '汝南县'
+					},
+					{
+						value: 1521,
+						label: '遂平县'
+					},
+					{
+						value: 1522,
+						label: '新蔡县'
+					}
+				]
+			}
+		]
+	},
+	{
+		value: 17,
+		label: '湖北',
+		children: [{
+				value: 169,
+				label: '武汉',
+				children: [{
+						value: 1523,
+						label: '江岸区'
+					},
+					{
+						value: 1524,
+						label: '江汉区'
+					},
+					{
+						value: 1525,
+						label: '硚口区'
+					},
+					{
+						value: 1526,
+						label: '汉阳区'
+					},
+					{
+						value: 1527,
+						label: '武昌区'
+					},
+					{
+						value: 1528,
+						label: '青山区'
+					},
+					{
+						value: 1529,
+						label: '洪山区'
+					},
+					{
+						value: 1530,
+						label: '东西湖区'
+					},
+					{
+						value: 1531,
+						label: '汉南区'
+					},
+					{
+						value: 1532,
+						label: '蔡甸区'
+					},
+					{
+						value: 1533,
+						label: '江夏区'
+					},
+					{
+						value: 1534,
+						label: '黄陂区'
+					},
+					{
+						value: 1535,
+						label: '新洲区'
+					}
+				]
+			},
+			{
+				value: 170,
+				label: '黄石',
+				children: [{
+						value: 1536,
+						label: '黄石港区'
+					},
+					{
+						value: 1537,
+						label: '西塞山区'
+					},
+					{
+						value: 1538,
+						label: '下陆区'
+					},
+					{
+						value: 1539,
+						label: '铁山区'
+					},
+					{
+						value: 1540,
+						label: '阳新县'
+					},
+					{
+						value: 1541,
+						label: '大冶'
+					}
+				]
+			},
+			{
+				value: 171,
+				label: '十堰',
+				children: [{
+						value: 1542,
+						label: '茅箭区'
+					},
+					{
+						value: 1543,
+						label: '张湾区'
+					},
+					{
+						value: 1544,
+						label: '郧县'
+					},
+					{
+						value: 1545,
+						label: '郧西县'
+					},
+					{
+						value: 1546,
+						label: '竹山县'
+					},
+					{
+						value: 1547,
+						label: '竹溪县'
+					},
+					{
+						value: 1548,
+						label: '房县'
+					},
+					{
+						value: 1549,
+						label: '丹江口'
+					}
+				]
+			},
+			{
+				value: 172,
+				label: '宜昌',
+				children: [{
+						value: 1550,
+						label: '西陵区'
+					},
+					{
+						value: 1551,
+						label: '伍家岗区'
+					},
+					{
+						value: 1552,
+						label: '点军区'
+					},
+					{
+						value: 1553,
+						label: '猇亭区'
+					},
+					{
+						value: 1554,
+						label: '夷陵区'
+					},
+					{
+						value: 1555,
+						label: '远安县'
+					},
+					{
+						value: 1556,
+						label: '兴山县'
+					},
+					{
+						value: 1557,
+						label: '秭归县'
+					},
+					{
+						value: 1558,
+						label: '长阳土家族自治县'
+					},
+					{
+						value: 1559,
+						label: '五峰土家族自治县'
+					},
+					{
+						value: 1560,
+						label: '宜都'
+					},
+					{
+						value: 1561,
+						label: '当阳'
+					},
+					{
+						value: 1562,
+						label: '枝江'
+					}
+				]
+			},
+			{
+				value: 173,
+				label: '襄樊',
+				children: [{
+						value: 1563,
+						label: '襄城区'
+					},
+					{
+						value: 1564,
+						label: '樊城区'
+					},
+					{
+						value: 1565,
+						label: '襄阳区'
+					},
+					{
+						value: 1566,
+						label: '南漳县'
+					},
+					{
+						value: 1567,
+						label: '谷城县'
+					},
+					{
+						value: 1568,
+						label: '保康县'
+					},
+					{
+						value: 1569,
+						label: '老河口'
+					},
+					{
+						value: 1570,
+						label: '枣阳'
+					},
+					{
+						value: 1571,
+						label: '宜城'
+					}
+				]
+			},
+			{
+				value: 174,
+				label: '鄂州',
+				children: [{
+						value: 1572,
+						label: '梁子湖区'
+					},
+					{
+						value: 1573,
+						label: '华容区'
+					},
+					{
+						value: 1574,
+						label: '鄂城区'
+					}
+				]
+			},
+			{
+				value: 175,
+				label: '荆门',
+				children: [{
+						value: 1575,
+						label: '东宝区'
+					},
+					{
+						value: 1576,
+						label: '掇刀区'
+					},
+					{
+						value: 1577,
+						label: '京山县'
+					},
+					{
+						value: 1578,
+						label: '沙洋县'
+					},
+					{
+						value: 1579,
+						label: '钟祥'
+					}
+				]
+			},
+			{
+				value: 176,
+				label: '孝感',
+				children: [{
+						value: 1580,
+						label: '孝南区'
+					},
+					{
+						value: 1581,
+						label: '孝昌县'
+					},
+					{
+						value: 1582,
+						label: '大悟县'
+					},
+					{
+						value: 1583,
+						label: '云梦县'
+					},
+					{
+						value: 1584,
+						label: '应城'
+					},
+					{
+						value: 1585,
+						label: '安陆'
+					},
+					{
+						value: 1586,
+						label: '汉川'
+					}
+				]
+			},
+			{
+				value: 177,
+				label: '荆州',
+				children: [{
+						value: 1587,
+						label: '沙区'
+					},
+					{
+						value: 1588,
+						label: '荆州区'
+					},
+					{
+						value: 1589,
+						label: '公安县'
+					},
+					{
+						value: 1590,
+						label: '监利县'
+					},
+					{
+						value: 1591,
+						label: '江陵县'
+					},
+					{
+						value: 1592,
+						label: '石首'
+					},
+					{
+						value: 1593,
+						label: '洪湖'
+					},
+					{
+						value: 1594,
+						label: '松滋'
+					}
+				]
+			},
+			{
+				value: 178,
+				label: '黄冈',
+				children: [{
+						value: 1595,
+						label: '黄州区'
+					},
+					{
+						value: 1596,
+						label: '团风县'
+					},
+					{
+						value: 1597,
+						label: '红安县'
+					},
+					{
+						value: 1598,
+						label: '罗田县'
+					},
+					{
+						value: 1599,
+						label: '英山县'
+					},
+					{
+						value: 1600,
+						label: '浠水县'
+					},
+					{
+						value: 1601,
+						label: '蕲春县'
+					},
+					{
+						value: 1602,
+						label: '黄梅县'
+					},
+					{
+						value: 1603,
+						label: '麻城'
+					},
+					{
+						value: 1604,
+						label: '武穴'
+					}
+				]
+			},
+			{
+				value: 179,
+				label: '咸宁',
+				children: [{
+						value: 1605,
+						label: '咸安区'
+					},
+					{
+						value: 1606,
+						label: '嘉鱼县'
+					},
+					{
+						value: 1607,
+						label: '通城县'
+					},
+					{
+						value: 1608,
+						label: '崇阳县'
+					},
+					{
+						value: 1609,
+						label: '通山县'
+					},
+					{
+						value: 1610,
+						label: '赤壁'
+					}
+				]
+			},
+			{
+				value: 180,
+				label: '随州',
+				children: [{
+						value: 1611,
+						label: '曾都区'
+					},
+					{
+						value: 1612,
+						label: '广水'
+					}
+				]
+			},
+			{
+				value: 181,
+				label: '恩施',
+				children: [{
+						value: 1613,
+						label: '恩施'
+					},
+					{
+						value: 1614,
+						label: '利川'
+					},
+					{
+						value: 1615,
+						label: '建始县'
+					},
+					{
+						value: 1616,
+						label: '巴东县'
+					},
+					{
+						value: 1617,
+						label: '宣恩县'
+					},
+					{
+						value: 1618,
+						label: '咸丰县'
+					},
+					{
+						value: 1619,
+						label: '来凤县'
+					},
+					{
+						value: 1620,
+						label: '鹤峰县'
+					}
+				]
+			},
+			{
+				value: 182,
+				label: '神农架',
+				children: [{
+						value: 1621,
+						label: '仙桃'
+					},
+					{
+						value: 1622,
+						label: '潜江'
+					},
+					{
+						value: 1623,
+						label: '天门'
+					},
+					{
+						value: 1624,
+						label: '神农架林区'
+					}
+				]
+			}
+		]
+	},
+	{
+		value: 18,
+		label: '湖南',
+		children: [{
+				value: 183,
+				label: '长沙',
+				children: [{
+						value: 1625,
+						label: '芙蓉区'
+					},
+					{
+						value: 1626,
+						label: '天心区'
+					},
+					{
+						value: 1627,
+						label: '岳麓区'
+					},
+					{
+						value: 1628,
+						label: '开福区'
+					},
+					{
+						value: 1629,
+						label: '雨花区'
+					},
+					{
+						value: 1630,
+						label: '长沙县'
+					},
+					{
+						value: 1631,
+						label: '望城县'
+					},
+					{
+						value: 1632,
+						label: '宁乡县'
+					},
+					{
+						value: 1633,
+						label: '浏阳'
+					}
+				]
+			},
+			{
+				value: 184,
+				label: '株洲',
+				children: [{
+						value: 1634,
+						label: '荷塘区'
+					},
+					{
+						value: 1635,
+						label: '芦淞区'
+					},
+					{
+						value: 1636,
+						label: '石峰区'
+					},
+					{
+						value: 1637,
+						label: '天元区'
+					},
+					{
+						value: 1638,
+						label: '株洲县'
+					},
+					{
+						value: 1639,
+						label: '攸县'
+					},
+					{
+						value: 1640,
+						label: '茶陵县'
+					},
+					{
+						value: 1641,
+						label: '炎陵县'
+					},
+					{
+						value: 1642,
+						label: '醴陵'
+					}
+				]
+			},
+			{
+				value: 185,
+				label: '湘潭',
+				children: [{
+						value: 1643,
+						label: '雨湖区'
+					},
+					{
+						value: 1644,
+						label: '岳塘区'
+					},
+					{
+						value: 1645,
+						label: '湘潭县'
+					},
+					{
+						value: 1646,
+						label: '湘乡'
+					},
+					{
+						value: 1647,
+						label: '韶山'
+					}
+				]
+			},
+			{
+				value: 186,
+				label: '衡阳',
+				children: [{
+						value: 1648,
+						label: '珠晖区'
+					},
+					{
+						value: 1649,
+						label: '雁峰区'
+					},
+					{
+						value: 1650,
+						label: '石鼓区'
+					},
+					{
+						value: 1651,
+						label: '蒸湘区'
+					},
+					{
+						value: 1652,
+						label: '南岳区'
+					},
+					{
+						value: 1653,
+						label: '衡阳县'
+					},
+					{
+						value: 1654,
+						label: '衡南县'
+					},
+					{
+						value: 1655,
+						label: '衡山县'
+					},
+					{
+						value: 1656,
+						label: '衡东县'
+					},
+					{
+						value: 1657,
+						label: '祁东县'
+					},
+					{
+						value: 1658,
+						label: '耒阳'
+					},
+					{
+						value: 1659,
+						label: '常宁'
+					}
+				]
+			},
+			{
+				value: 187,
+				label: '邵阳',
+				children: [{
+						value: 1660,
+						label: '双清区'
+					},
+					{
+						value: 1661,
+						label: '大祥区'
+					},
+					{
+						value: 1662,
+						label: '北塔区'
+					},
+					{
+						value: 1663,
+						label: '邵东县'
+					},
+					{
+						value: 1664,
+						label: '新邵县'
+					},
+					{
+						value: 1665,
+						label: '邵阳县'
+					},
+					{
+						value: 1666,
+						label: '隆回县'
+					},
+					{
+						value: 1667,
+						label: '洞口县'
+					},
+					{
+						value: 1668,
+						label: '绥宁县'
+					},
+					{
+						value: 1669,
+						label: '新宁县'
+					},
+					{
+						value: 1670,
+						label: '城步苗族自治县'
+					},
+					{
+						value: 1671,
+						label: '武冈'
+					}
+				]
+			},
+			{
+				value: 188,
+				label: '岳阳',
+				children: [{
+						value: 1672,
+						label: '岳阳楼区'
+					},
+					{
+						value: 1673,
+						label: '云溪区'
+					},
+					{
+						value: 1674,
+						label: '君山区'
+					},
+					{
+						value: 1675,
+						label: '岳阳县'
+					},
+					{
+						value: 1676,
+						label: '华容县'
+					},
+					{
+						value: 1677,
+						label: '湘阴县'
+					},
+					{
+						value: 1678,
+						label: '平江县'
+					},
+					{
+						value: 1679,
+						label: '汨罗'
+					},
+					{
+						value: 1680,
+						label: '临湘'
+					}
+				]
+			},
+			{
+				value: 189,
+				label: '常德',
+				children: [{
+						value: 1681,
+						label: '武陵区'
+					},
+					{
+						value: 1682,
+						label: '鼎城区'
+					},
+					{
+						value: 1683,
+						label: '安乡县'
+					},
+					{
+						value: 1684,
+						label: '汉寿县'
+					},
+					{
+						value: 1685,
+						label: '澧县'
+					},
+					{
+						value: 1686,
+						label: '临澧县'
+					},
+					{
+						value: 1687,
+						label: '桃源县'
+					},
+					{
+						value: 1688,
+						label: '石门县'
+					},
+					{
+						value: 1689,
+						label: '津'
+					}
+				]
+			},
+			{
+				value: 190,
+				label: '张家界',
+				children: [{
+						value: 1690,
+						label: '永定区'
+					},
+					{
+						value: 1691,
+						label: '武陵源区'
+					},
+					{
+						value: 1692,
+						label: '慈利县'
+					},
+					{
+						value: 1693,
+						label: '桑植县'
+					}
+				]
+			},
+			{
+				value: 191,
+				label: '益阳',
+				children: [{
+						value: 1694,
+						label: '资阳区'
+					},
+					{
+						value: 1695,
+						label: '赫山区'
+					},
+					{
+						value: 1696,
+						label: '南县'
+					},
+					{
+						value: 1697,
+						label: '桃江县'
+					},
+					{
+						value: 1698,
+						label: '安化县'
+					},
+					{
+						value: 1699,
+						label: '沅江'
+					}
+				]
+			},
+			{
+				value: 192,
+				label: '郴州',
+				children: [{
+						value: 1700,
+						label: '北湖区'
+					},
+					{
+						value: 1701,
+						label: '苏仙区'
+					},
+					{
+						value: 1702,
+						label: '桂阳县'
+					},
+					{
+						value: 1703,
+						label: '宜章县'
+					},
+					{
+						value: 1704,
+						label: '永兴县'
+					},
+					{
+						value: 1705,
+						label: '嘉禾县'
+					},
+					{
+						value: 1706,
+						label: '临武县'
+					},
+					{
+						value: 1707,
+						label: '汝城县'
+					},
+					{
+						value: 1708,
+						label: '桂东县'
+					},
+					{
+						value: 1709,
+						label: '安仁县'
+					},
+					{
+						value: 1710,
+						label: '资兴'
+					}
+				]
+			},
+			{
+				value: 193,
+				label: '永州',
+				children: [{
+						value: 1711,
+						label: '芝山区'
+					},
+					{
+						value: 1712,
+						label: '冷水滩区'
+					},
+					{
+						value: 1713,
+						label: '祁阳县'
+					},
+					{
+						value: 1714,
+						label: '东安县'
+					},
+					{
+						value: 1715,
+						label: '双牌县'
+					},
+					{
+						value: 1716,
+						label: '道县'
+					},
+					{
+						value: 1717,
+						label: '江永县'
+					},
+					{
+						value: 1718,
+						label: '宁远县'
+					},
+					{
+						value: 1719,
+						label: '蓝山县'
+					},
+					{
+						value: 1720,
+						label: '新田县'
+					},
+					{
+						value: 1721,
+						label: '江华瑶族自治县'
+					}
+				]
+			},
+			{
+				value: 194,
+				label: '怀化',
+				children: [{
+						value: 1722,
+						label: '鹤城区'
+					},
+					{
+						value: 1723,
+						label: '中方县'
+					},
+					{
+						value: 1724,
+						label: '沅陵县'
+					},
+					{
+						value: 1725,
+						label: '辰溪县'
+					},
+					{
+						value: 1726,
+						label: '溆浦县'
+					},
+					{
+						value: 1727,
+						label: '会同县'
+					},
+					{
+						value: 1728,
+						label: '麻阳苗族自治县'
+					},
+					{
+						value: 1729,
+						label: '新晃侗族自治县'
+					},
+					{
+						value: 1730,
+						label: '芷江侗族自治县'
+					},
+					{
+						value: 1731,
+						label: '靖州苗族侗族自治县'
+					},
+					{
+						value: 1732,
+						label: '通道侗族自治县'
+					},
+					{
+						value: 1733,
+						label: '洪江'
+					}
+				]
+			},
+			{
+				value: 195,
+				label: '娄底',
+				children: [{
+						value: 1734,
+						label: '娄星区'
+					},
+					{
+						value: 1735,
+						label: '双峰县'
+					},
+					{
+						value: 1736,
+						label: '新化县'
+					},
+					{
+						value: 1737,
+						label: '冷水江'
+					},
+					{
+						value: 1738,
+						label: '涟源'
+					}
+				]
+			},
+			{
+				value: 196,
+				label: '湘西',
+				children: [{
+						value: 1739,
+						label: '吉首'
+					},
+					{
+						value: 1740,
+						label: '泸溪县'
+					},
+					{
+						value: 1741,
+						label: '凤凰县'
+					},
+					{
+						value: 1742,
+						label: '花垣县'
+					},
+					{
+						value: 1743,
+						label: '保靖县'
+					},
+					{
+						value: 1744,
+						label: '古丈县'
+					},
+					{
+						value: 1745,
+						label: '永顺县'
+					},
+					{
+						value: 1746,
+						label: '龙山县'
+					}
+				]
+			}
+		]
+	},
+	{
+		value: 19,
+		label: '广东',
+		children: [{
+				value: 197,
+				label: '广州',
+				children: [{
+						value: 1747,
+						label: '东山区'
+					},
+					{
+						value: 1748,
+						label: '荔湾区'
+					},
+					{
+						value: 1749,
+						label: '越秀区'
+					},
+					{
+						value: 1750,
+						label: '海珠区'
+					},
+					{
+						value: 1751,
+						label: '天河区'
+					},
+					{
+						value: 1752,
+						label: '芳村区'
+					},
+					{
+						value: 1753,
+						label: '白云区'
+					},
+					{
+						value: 1754,
+						label: '黄埔区'
+					},
+					{
+						value: 1755,
+						label: '番禺区'
+					},
+					{
+						value: 1756,
+						label: '花都区'
+					},
+					{
+						value: 1757,
+						label: '增城'
+					},
+					{
+						value: 1758,
+						label: '从化'
+					}
+				]
+			},
+			{
+				value: 198,
+				label: '韶关',
+				children: [{
+						value: 1759,
+						label: '武江区'
+					},
+					{
+						value: 1760,
+						label: '浈江区'
+					},
+					{
+						value: 1761,
+						label: '曲江区'
+					},
+					{
+						value: 1762,
+						label: '始兴县'
+					},
+					{
+						value: 1763,
+						label: '仁化县'
+					},
+					{
+						value: 1764,
+						label: '翁源县'
+					},
+					{
+						value: 1765,
+						label: '乳源瑶族自治县'
+					},
+					{
+						value: 1766,
+						label: '新丰县'
+					},
+					{
+						value: 1767,
+						label: '乐昌'
+					},
+					{
+						value: 1768,
+						label: '南雄'
+					}
+				]
+			},
+			{
+				value: 199,
+				label: '深圳',
+				children: [{
+						value: 1769,
+						label: '罗湖区'
+					},
+					{
+						value: 1770,
+						label: '福田区'
+					},
+					{
+						value: 1771,
+						label: '南山区'
+					},
+					{
+						value: 1772,
+						label: '宝安区'
+					},
+					{
+						value: 1773,
+						label: '龙岗区'
+					},
+					{
+						value: 1774,
+						label: '盐田区'
+					}
+				]
+			},
+			{
+				value: 200,
+				label: '珠海',
+				children: [{
+						value: 1775,
+						label: '香洲区'
+					},
+					{
+						value: 1776,
+						label: '斗门区'
+					},
+					{
+						value: 1777,
+						label: '金湾区'
+					}
+				]
+			},
+			{
+				value: 201,
+				label: '汕头',
+				children: [{
+						value: 1778,
+						label: '龙湖区'
+					},
+					{
+						value: 1779,
+						label: '金平区'
+					},
+					{
+						value: 1780,
+						label: '濠江区'
+					},
+					{
+						value: 1781,
+						label: '潮阳区'
+					},
+					{
+						value: 1782,
+						label: '潮南区'
+					},
+					{
+						value: 1783,
+						label: '澄海区'
+					},
+					{
+						value: 1784,
+						label: '南澳县'
+					}
+				]
+			},
+			{
+				value: 202,
+				label: '佛山',
+				children: [{
+						value: 1785,
+						label: '禅城区'
+					},
+					{
+						value: 1786,
+						label: '南海区'
+					},
+					{
+						value: 1787,
+						label: '顺德区'
+					},
+					{
+						value: 1788,
+						label: '三水区'
+					},
+					{
+						value: 1789,
+						label: '高明区'
+					}
+				]
+			},
+			{
+				value: 203,
+				label: '江门',
+				children: [{
+						value: 1790,
+						label: '蓬江区'
+					},
+					{
+						value: 1791,
+						label: '江海区'
+					},
+					{
+						value: 1792,
+						label: '新会区'
+					},
+					{
+						value: 1793,
+						label: '台山'
+					},
+					{
+						value: 1794,
+						label: '开平'
+					},
+					{
+						value: 1795,
+						label: '鹤山'
+					},
+					{
+						value: 1796,
+						label: '恩平'
+					}
+				]
+			},
+			{
+				value: 204,
+				label: '湛江',
+				children: [{
+						value: 1797,
+						label: '赤坎区'
+					},
+					{
+						value: 1798,
+						label: '霞山区'
+					},
+					{
+						value: 1799,
+						label: '坡头区'
+					},
+					{
+						value: 1800,
+						label: '麻章区'
+					},
+					{
+						value: 1801,
+						label: '遂溪县'
+					},
+					{
+						value: 1802,
+						label: '徐闻县'
+					},
+					{
+						value: 1803,
+						label: '廉江'
+					},
+					{
+						value: 1804,
+						label: '雷州'
+					},
+					{
+						value: 1805,
+						label: '吴川'
+					}
+				]
+			},
+			{
+				value: 205,
+				label: '茂名',
+				children: [{
+						value: 1806,
+						label: '茂南区'
+					},
+					{
+						value: 1807,
+						label: '茂港区'
+					},
+					{
+						value: 1808,
+						label: '电白县'
+					},
+					{
+						value: 1809,
+						label: '高州'
+					},
+					{
+						value: 1810,
+						label: '化州'
+					},
+					{
+						value: 1811,
+						label: '信宜'
+					}
+				]
+			},
+			{
+				value: 206,
+				label: '肇庆',
+				children: [{
+						value: 1812,
+						label: '端州区'
+					},
+					{
+						value: 1813,
+						label: '鼎湖区'
+					},
+					{
+						value: 1814,
+						label: '广宁县'
+					},
+					{
+						value: 1815,
+						label: '怀集县'
+					},
+					{
+						value: 1816,
+						label: '封开县'
+					},
+					{
+						value: 1817,
+						label: '德庆县'
+					},
+					{
+						value: 1818,
+						label: '高要'
+					},
+					{
+						value: 1819,
+						label: '四会'
+					}
+				]
+			},
+			{
+				value: 207,
+				label: '惠州',
+				children: [{
+						value: 1820,
+						label: '惠城区'
+					},
+					{
+						value: 1821,
+						label: '惠阳区'
+					},
+					{
+						value: 1822,
+						label: '博罗县'
+					},
+					{
+						value: 1823,
+						label: '惠东县'
+					},
+					{
+						value: 1824,
+						label: '龙门县'
+					}
+				]
+			},
+			{
+				value: 208,
+				label: '梅州',
+				children: [{
+						value: 1825,
+						label: '梅江区'
+					},
+					{
+						value: 1826,
+						label: '梅县'
+					},
+					{
+						value: 1827,
+						label: '大埔县'
+					},
+					{
+						value: 1828,
+						label: '丰顺县'
+					},
+					{
+						value: 1829,
+						label: '五华县'
+					},
+					{
+						value: 1830,
+						label: '平远县'
+					},
+					{
+						value: 1831,
+						label: '蕉岭县'
+					},
+					{
+						value: 1832,
+						label: '兴宁'
+					}
+				]
+			},
+			{
+				value: 209,
+				label: '汕尾',
+				children: [{
+						value: 1833,
+						label: '城区'
+					},
+					{
+						value: 1834,
+						label: '海丰县'
+					},
+					{
+						value: 1835,
+						label: '陆河县'
+					},
+					{
+						value: 1836,
+						label: '陆丰'
+					}
+				]
+			},
+			{
+				value: 210,
+				label: '河源',
+				children: [{
+						value: 1837,
+						label: '源城区'
+					},
+					{
+						value: 1838,
+						label: '紫金县'
+					},
+					{
+						value: 1839,
+						label: '龙川县'
+					},
+					{
+						value: 1840,
+						label: '连平县'
+					},
+					{
+						value: 1841,
+						label: '和平县'
+					},
+					{
+						value: 1842,
+						label: '东源县'
+					}
+				]
+			},
+			{
+				value: 211,
+				label: '阳江',
+				children: [{
+						value: 1843,
+						label: '江城区'
+					},
+					{
+						value: 1844,
+						label: '阳西县'
+					},
+					{
+						value: 1845,
+						label: '阳东县'
+					},
+					{
+						value: 1846,
+						label: '阳春'
+					}
+				]
+			},
+			{
+				value: 212,
+				label: '清远',
+				children: [{
+						value: 1847,
+						label: '清城区'
+					},
+					{
+						value: 1848,
+						label: '佛冈县'
+					},
+					{
+						value: 1849,
+						label: '阳山县'
+					},
+					{
+						value: 1850,
+						label: '连山壮族瑶族自治县'
+					},
+					{
+						value: 1851,
+						label: '连南瑶族自治县'
+					},
+					{
+						value: 1852,
+						label: '清新县'
+					},
+					{
+						value: 1853,
+						label: '英德'
+					},
+					{
+						value: 1854,
+						label: '连州'
+					}
+				]
+			},
+			{
+				value: 213,
+				label: '东莞',
+				children: []
+			},
+			{
+				value: 214,
+				label: '中山',
+				children: []
+			},
+			{
+				value: 215,
+				label: '潮州',
+				children: [{
+						value: 1855,
+						label: '湘桥区'
+					},
+					{
+						value: 1856,
+						label: '潮安县'
+					},
+					{
+						value: 1857,
+						label: '饶平县'
+					}
+				]
+			},
+			{
+				value: 216,
+				label: '揭阳',
+				children: [{
+						value: 1858,
+						label: '榕城区'
+					},
+					{
+						value: 1859,
+						label: '揭东县'
+					},
+					{
+						value: 1860,
+						label: '揭西县'
+					},
+					{
+						value: 1861,
+						label: '惠来县'
+					},
+					{
+						value: 1862,
+						label: '普宁'
+					}
+				]
+			},
+			{
+				value: 217,
+				label: '云浮',
+				children: [{
+						value: 1863,
+						label: '云城区'
+					},
+					{
+						value: 1864,
+						label: '新兴县'
+					},
+					{
+						value: 1865,
+						label: '郁南县'
+					},
+					{
+						value: 1866,
+						label: '云安县'
+					},
+					{
+						value: 1867,
+						label: '罗定'
+					}
+				]
+			}
+		]
+	},
+	{
+		value: 20,
+		label: '广西',
+		children: [{
+				value: 218,
+				label: '南宁',
+				children: [{
+						value: 1868,
+						label: '兴宁区'
+					},
+					{
+						value: 1869,
+						label: '青秀区'
+					},
+					{
+						value: 1870,
+						label: '江南区'
+					},
+					{
+						value: 1871,
+						label: '西乡塘区'
+					},
+					{
+						value: 1872,
+						label: '良庆区'
+					},
+					{
+						value: 1873,
+						label: '邕宁区'
+					},
+					{
+						value: 1874,
+						label: '武鸣县'
+					},
+					{
+						value: 1875,
+						label: '隆安县'
+					},
+					{
+						value: 1876,
+						label: '马山县'
+					},
+					{
+						value: 1877,
+						label: '上林县'
+					},
+					{
+						value: 1878,
+						label: '宾阳县'
+					},
+					{
+						value: 1879,
+						label: '横县'
+					}
+				]
+			},
+			{
+				value: 219,
+				label: '柳州',
+				children: [{
+						value: 1880,
+						label: '城中区'
+					},
+					{
+						value: 1881,
+						label: '鱼峰区'
+					},
+					{
+						value: 1882,
+						label: '柳南区'
+					},
+					{
+						value: 1883,
+						label: '柳北区'
+					},
+					{
+						value: 1884,
+						label: '柳江县'
+					},
+					{
+						value: 1885,
+						label: '柳城县'
+					},
+					{
+						value: 1886,
+						label: '鹿寨县'
+					},
+					{
+						value: 1887,
+						label: '融安县'
+					},
+					{
+						value: 1888,
+						label: '融水苗族自治县'
+					},
+					{
+						value: 1889,
+						label: '三江侗族自治县'
+					}
+				]
+			},
+			{
+				value: 220,
+				label: '桂林',
+				children: [{
+						value: 1890,
+						label: '秀峰区'
+					},
+					{
+						value: 1891,
+						label: '叠彩区'
+					},
+					{
+						value: 1892,
+						label: '象山区'
+					},
+					{
+						value: 1893,
+						label: '七星区'
+					},
+					{
+						value: 1894,
+						label: '雁山区'
+					},
+					{
+						value: 1895,
+						label: '阳朔县'
+					},
+					{
+						value: 1896,
+						label: '临桂县'
+					},
+					{
+						value: 1897,
+						label: '灵川县'
+					},
+					{
+						value: 1898,
+						label: '全州县'
+					},
+					{
+						value: 1899,
+						label: '兴安县'
+					},
+					{
+						value: 1900,
+						label: '永福县'
+					},
+					{
+						value: 1901,
+						label: '灌阳县'
+					},
+					{
+						value: 1902,
+						label: '龙胜各族自治县'
+					},
+					{
+						value: 1903,
+						label: '资源县'
+					},
+					{
+						value: 1904,
+						label: '平乐县'
+					},
+					{
+						value: 1905,
+						label: '荔蒲县'
+					},
+					{
+						value: 1906,
+						label: '恭城瑶族自治县'
+					}
+				]
+			},
+			{
+				value: 221,
+				label: '梧州',
+				children: [{
+						value: 1907,
+						label: '万秀区'
+					},
+					{
+						value: 1908,
+						label: '蝶山区'
+					},
+					{
+						value: 1909,
+						label: '长洲区'
+					},
+					{
+						value: 1910,
+						label: '苍梧县'
+					},
+					{
+						value: 1911,
+						label: '藤县'
+					},
+					{
+						value: 1912,
+						label: '蒙山县'
+					},
+					{
+						value: 1913,
+						label: '岑溪'
+					}
+				]
+			},
+			{
+				value: 222,
+				label: '北海',
+				children: [{
+						value: 1914,
+						label: '海城区'
+					},
+					{
+						value: 1915,
+						label: '银海区'
+					},
+					{
+						value: 1916,
+						label: '铁山港区'
+					},
+					{
+						value: 1917,
+						label: '合浦县'
+					}
+				]
+			},
+			{
+				value: 223,
+				label: '防城港',
+				children: [{
+						value: 1918,
+						label: '港口区'
+					},
+					{
+						value: 1919,
+						label: '防城区'
+					},
+					{
+						value: 1920,
+						label: '上思县'
+					},
+					{
+						value: 1921,
+						label: '东兴'
+					}
+				]
+			},
+			{
+				value: 224,
+				label: '钦州',
+				children: [{
+						value: 1922,
+						label: '钦南区'
+					},
+					{
+						value: 1923,
+						label: '钦北区'
+					},
+					{
+						value: 1924,
+						label: '灵山县'
+					},
+					{
+						value: 1925,
+						label: '浦北县'
+					}
+				]
+			},
+			{
+				value: 225,
+				label: '贵港',
+				children: [{
+						value: 1926,
+						label: '港北区'
+					},
+					{
+						value: 1927,
+						label: '港南区'
+					},
+					{
+						value: 1928,
+						label: '覃塘区'
+					},
+					{
+						value: 1929,
+						label: '平南县'
+					},
+					{
+						value: 1930,
+						label: '桂平'
+					}
+				]
+			},
+			{
+				value: 226,
+				label: '玉林',
+				children: [{
+						value: 1931,
+						label: '玉州区'
+					},
+					{
+						value: 1932,
+						label: '容县'
+					},
+					{
+						value: 1933,
+						label: '陆川县'
+					},
+					{
+						value: 1934,
+						label: '博白县'
+					},
+					{
+						value: 1935,
+						label: '兴业县'
+					},
+					{
+						value: 1936,
+						label: '北流'
+					}
+				]
+			},
+			{
+				value: 227,
+				label: '百色',
+				children: [{
+						value: 1937,
+						label: '右江区'
+					},
+					{
+						value: 1938,
+						label: '田阳县'
+					},
+					{
+						value: 1939,
+						label: '田东县'
+					},
+					{
+						value: 1940,
+						label: '平果县'
+					},
+					{
+						value: 1941,
+						label: '德保县'
+					},
+					{
+						value: 1942,
+						label: '靖西县'
+					},
+					{
+						value: 1943,
+						label: '那坡县'
+					},
+					{
+						value: 1944,
+						label: '凌云县'
+					},
+					{
+						value: 1945,
+						label: '乐业县'
+					},
+					{
+						value: 1946,
+						label: '田林县'
+					},
+					{
+						value: 1947,
+						label: '西林县'
+					},
+					{
+						value: 1948,
+						label: '隆林各族自治县'
+					}
+				]
+			},
+			{
+				value: 228,
+				label: '贺州',
+				children: [{
+						value: 1949,
+						label: '八步区'
+					},
+					{
+						value: 1950,
+						label: '昭平县'
+					},
+					{
+						value: 1951,
+						label: '钟山县'
+					},
+					{
+						value: 1952,
+						label: '富川瑶族自治县'
+					}
+				]
+			},
+			{
+				value: 229,
+				label: '河池',
+				children: [{
+						value: 1953,
+						label: '金城江区'
+					},
+					{
+						value: 1954,
+						label: '南丹县'
+					},
+					{
+						value: 1955,
+						label: '天峨县'
+					},
+					{
+						value: 1956,
+						label: '凤山县'
+					},
+					{
+						value: 1957,
+						label: '东兰县'
+					},
+					{
+						value: 1958,
+						label: '罗城仫佬族自治县'
+					},
+					{
+						value: 1959,
+						label: '环江毛南族自治县'
+					},
+					{
+						value: 1960,
+						label: '巴马瑶族自治县'
+					},
+					{
+						value: 1961,
+						label: '都安瑶族自治县'
+					},
+					{
+						value: 1962,
+						label: '大化瑶族自治县'
+					},
+					{
+						value: 1963,
+						label: '宜州'
+					}
+				]
+			},
+			{
+				value: 230,
+				label: '来宾',
+				children: [{
+						value: 1964,
+						label: '兴宾区'
+					},
+					{
+						value: 1965,
+						label: '忻城县'
+					},
+					{
+						value: 1966,
+						label: '象州县'
+					},
+					{
+						value: 1967,
+						label: '武宣县'
+					},
+					{
+						value: 1968,
+						label: '金秀瑶族自治县'
+					},
+					{
+						value: 1969,
+						label: '合山'
+					}
+				]
+			},
+			{
+				value: 231,
+				label: '崇左',
+				children: [{
+						value: 1970,
+						label: '江洲区'
+					},
+					{
+						value: 1971,
+						label: '扶绥县'
+					},
+					{
+						value: 1972,
+						label: '宁明县'
+					},
+					{
+						value: 1973,
+						label: '龙州县'
+					},
+					{
+						value: 1974,
+						label: '大新县'
+					},
+					{
+						value: 1975,
+						label: '天等县'
+					},
+					{
+						value: 1976,
+						label: '凭祥'
+					}
+				]
+			}
+		]
+	},
+	{
+		value: 21,
+		label: '海南',
+		children: [{
+				value: 232,
+				label: '海口',
+				children: [{
+						value: 1977,
+						label: '秀英区'
+					},
+					{
+						value: 1978,
+						label: '龙华区'
+					},
+					{
+						value: 1979,
+						label: '琼山区'
+					},
+					{
+						value: 1980,
+						label: '美兰区'
+					}
+				]
+			},
+			{
+				value: 233,
+				label: '三亚',
+				children: [{
+						value: 1981,
+						label: '五指山'
+					},
+					{
+						value: 1982,
+						label: '琼海'
+					},
+					{
+						value: 1983,
+						label: '儋州'
+					},
+					{
+						value: 1984,
+						label: '文昌'
+					},
+					{
+						value: 1985,
+						label: '万宁'
+					},
+					{
+						value: 1986,
+						label: '东方'
+					},
+					{
+						value: 1987,
+						label: '定安县'
+					},
+					{
+						value: 1988,
+						label: '屯昌县'
+					},
+					{
+						value: 1989,
+						label: '澄迈县'
+					},
+					{
+						value: 1990,
+						label: '临高县'
+					},
+					{
+						value: 1991,
+						label: '白沙黎族自治县'
+					},
+					{
+						value: 1992,
+						label: '昌江黎族自治县'
+					},
+					{
+						value: 1993,
+						label: '乐东黎族自治县'
+					},
+					{
+						value: 1994,
+						label: '陵水黎族自治县'
+					},
+					{
+						value: 1995,
+						label: '保亭黎族苗族自治县'
+					},
+					{
+						value: 1996,
+						label: '琼中黎族苗族自治县'
+					},
+					{
+						value: 1997,
+						label: '西沙群岛'
+					},
+					{
+						value: 1998,
+						label: '南沙群岛'
+					},
+					{
+						value: 1999,
+						label: '中沙群岛的岛礁及其海域'
+					}
+				]
+			}
+		]
+	},
+	{
+		value: 22,
+		label: '重庆',
+		children: [{
+				value: 2000,
+				label: '万州区'
+			},
+			{
+				value: 2001,
+				label: '涪陵区'
+			},
+			{
+				value: 2002,
+				label: '渝中区'
+			},
+			{
+				value: 2003,
+				label: '大渡口区'
+			},
+			{
+				value: 2004,
+				label: '江北区'
+			},
+			{
+				value: 2005,
+				label: '沙坪坝区'
+			},
+			{
+				value: 2006,
+				label: '九龙坡区'
+			},
+			{
+				value: 2007,
+				label: '南岸区'
+			},
+			{
+				value: 2008,
+				label: '北碚区'
+			},
+			{
+				value: 2009,
+				label: '万盛区'
+			},
+			{
+				value: 2010,
+				label: '双桥区'
+			},
+			{
+				value: 2011,
+				label: '渝北区'
+			},
+			{
+				value: 2012,
+				label: '巴南区'
+			},
+			{
+				value: 2013,
+				label: '黔江区'
+			},
+			{
+				value: 2014,
+				label: '长寿区'
+			},
+			{
+				value: 2015,
+				label: '綦江县'
+			},
+			{
+				value: 2016,
+				label: '潼南县'
+			},
+			{
+				value: 2017,
+				label: '铜梁县'
+			},
+			{
+				value: 2018,
+				label: '大足县'
+			},
+			{
+				value: 2019,
+				label: '荣昌县'
+			},
+			{
+				value: 2020,
+				label: '璧山县'
+			},
+			{
+				value: 2021,
+				label: '梁平县'
+			},
+			{
+				value: 2022,
+				label: '城口县'
+			},
+			{
+				value: 2023,
+				label: '丰都县'
+			},
+			{
+				value: 2024,
+				label: '垫江县'
+			},
+			{
+				value: 2025,
+				label: '武隆县'
+			},
+			{
+				value: 2026,
+				label: '忠县'
+			},
+			{
+				value: 2027,
+				label: '开县'
+			},
+			{
+				value: 2028,
+				label: '云阳县'
+			},
+			{
+				value: 2029,
+				label: '奉节县'
+			},
+			{
+				value: 2030,
+				label: '巫山县'
+			},
+			{
+				value: 2031,
+				label: '巫溪县'
+			},
+			{
+				value: 2032,
+				label: '石柱土家族自治县'
+			},
+			{
+				value: 2033,
+				label: '秀山土家族苗族自治县'
+			},
+			{
+				value: 2034,
+				label: '酉阳土家族苗族自治县'
+			},
+			{
+				value: 2035,
+				label: '彭水苗族土家族自治县'
+			},
+			{
+				value: 2036,
+				label: '江津'
+			},
+			{
+				value: 2037,
+				label: '合川'
+			},
+			{
+				value: 2038,
+				label: '永川'
+			},
+			{
+				value: 2039,
+				label: '南川'
+			}
+		]
+	},
+	{
+		value: 23,
+		label: '四川',
+		children: [{
+				value: 235,
+				label: '成都',
+				children: [{
+						value: 2040,
+						label: '锦江区'
+					},
+					{
+						value: 2041,
+						label: '青羊区'
+					},
+					{
+						value: 2042,
+						label: '金牛区'
+					},
+					{
+						value: 2043,
+						label: '武侯区'
+					},
+					{
+						value: 2044,
+						label: '成华区'
+					},
+					{
+						value: 2045,
+						label: '龙泉驿区'
+					},
+					{
+						value: 2046,
+						label: '青白江区'
+					},
+					{
+						value: 2047,
+						label: '新都区'
+					},
+					{
+						value: 2048,
+						label: '温江区'
+					},
+					{
+						value: 2049,
+						label: '金堂县'
+					},
+					{
+						value: 2050,
+						label: '双流县'
+					},
+					{
+						value: 2051,
+						label: '郫县'
+					},
+					{
+						value: 2052,
+						label: '大邑县'
+					},
+					{
+						value: 2053,
+						label: '蒲江县'
+					},
+					{
+						value: 2054,
+						label: '新津县'
+					},
+					{
+						value: 2055,
+						label: '都江堰'
+					},
+					{
+						value: 2056,
+						label: '彭州'
+					},
+					{
+						value: 2057,
+						label: '邛崃'
+					},
+					{
+						value: 2058,
+						label: '崇州'
+					}
+				]
+			},
+			{
+				value: 236,
+				label: '自贡',
+				children: [{
+						value: 2059,
+						label: '自流井区'
+					},
+					{
+						value: 2060,
+						label: '贡井区'
+					},
+					{
+						value: 2061,
+						label: '大安区'
+					},
+					{
+						value: 2062,
+						label: '沿滩区'
+					},
+					{
+						value: 2063,
+						label: '荣县'
+					},
+					{
+						value: 2064,
+						label: '富顺县'
+					}
+				]
+			},
+			{
+				value: 237,
+				label: '攀枝花',
+				children: [{
+						value: 2065,
+						label: '东区'
+					},
+					{
+						value: 2066,
+						label: '西区'
+					},
+					{
+						value: 2067,
+						label: '仁和区'
+					},
+					{
+						value: 2068,
+						label: '米易县'
+					},
+					{
+						value: 2069,
+						label: '盐边县'
+					}
+				]
+			},
+			{
+				value: 238,
+				label: '泸州',
+				children: [{
+						value: 2070,
+						label: '江阳区'
+					},
+					{
+						value: 2071,
+						label: '纳溪区'
+					},
+					{
+						value: 2072,
+						label: '龙马潭区'
+					},
+					{
+						value: 2073,
+						label: '泸县'
+					},
+					{
+						value: 2074,
+						label: '合江县'
+					},
+					{
+						value: 2075,
+						label: '叙永县'
+					},
+					{
+						value: 2076,
+						label: '古蔺县'
+					}
+				]
+			},
+			{
+				value: 239,
+				label: '德阳',
+				children: [{
+						value: 2077,
+						label: '旌阳区'
+					},
+					{
+						value: 2078,
+						label: '中江县'
+					},
+					{
+						value: 2079,
+						label: '罗江县'
+					},
+					{
+						value: 2080,
+						label: '广汉'
+					},
+					{
+						value: 2081,
+						label: '什邡'
+					},
+					{
+						value: 2082,
+						label: '绵竹'
+					}
+				]
+			},
+			{
+				value: 240,
+				label: '绵阳',
+				children: [{
+						value: 2083,
+						label: '涪城区'
+					},
+					{
+						value: 2084,
+						label: '游仙区'
+					},
+					{
+						value: 2085,
+						label: '三台县'
+					},
+					{
+						value: 2086,
+						label: '盐亭县'
+					},
+					{
+						value: 2087,
+						label: '安县'
+					},
+					{
+						value: 2088,
+						label: '梓潼县'
+					},
+					{
+						value: 2089,
+						label: '北川羌族自治县'
+					},
+					{
+						value: 2090,
+						label: '平武县'
+					},
+					{
+						value: 2091,
+						label: '江油'
+					}
+				]
+			},
+			{
+				value: 241,
+				label: '广元',
+				children: [{
+						value: 2092,
+						label: '中区'
+					},
+					{
+						value: 2093,
+						label: '元坝区'
+					},
+					{
+						value: 2094,
+						label: '朝天区'
+					},
+					{
+						value: 2095,
+						label: '旺苍县'
+					},
+					{
+						value: 2096,
+						label: '青川县'
+					},
+					{
+						value: 2097,
+						label: '剑阁县'
+					},
+					{
+						value: 2098,
+						label: '苍溪县'
+					}
+				]
+			},
+			{
+				value: 242,
+				label: '遂宁',
+				children: [{
+						value: 2099,
+						label: '船山区'
+					},
+					{
+						value: 2100,
+						label: '安居区'
+					},
+					{
+						value: 2101,
+						label: '蓬溪县'
+					},
+					{
+						value: 2102,
+						label: '射洪县'
+					},
+					{
+						value: 2103,
+						label: '大英县'
+					}
+				]
+			},
+			{
+				value: 243,
+				label: '内江',
+				children: [{
+						value: 2104,
+						label: '中区'
+					},
+					{
+						value: 2105,
+						label: '东兴区'
+					},
+					{
+						value: 2106,
+						label: '威远县'
+					},
+					{
+						value: 2107,
+						label: '资中县'
+					},
+					{
+						value: 2108,
+						label: '隆昌县'
+					}
+				]
+			},
+			{
+				value: 244,
+				label: '乐山',
+				children: [{
+						value: 2109,
+						label: '中区'
+					},
+					{
+						value: 2110,
+						label: '沙湾区'
+					},
+					{
+						value: 2111,
+						label: '五通桥区'
+					},
+					{
+						value: 2112,
+						label: '金口河区'
+					},
+					{
+						value: 2113,
+						label: '犍为县'
+					},
+					{
+						value: 2114,
+						label: '井研县'
+					},
+					{
+						value: 2115,
+						label: '夹江县'
+					},
+					{
+						value: 2116,
+						label: '沐川县'
+					},
+					{
+						value: 2117,
+						label: '峨边彝族自治县'
+					},
+					{
+						value: 2118,
+						label: '马边彝族自治县'
+					},
+					{
+						value: 2119,
+						label: '峨眉山'
+					}
+				]
+			},
+			{
+				value: 245,
+				label: '南充',
+				children: [{
+						value: 2120,
+						label: '顺庆区'
+					},
+					{
+						value: 2121,
+						label: '高坪区'
+					},
+					{
+						value: 2122,
+						label: '嘉陵区'
+					},
+					{
+						value: 2123,
+						label: '南部县'
+					},
+					{
+						value: 2124,
+						label: '营山县'
+					},
+					{
+						value: 2125,
+						label: '蓬安县'
+					},
+					{
+						value: 2126,
+						label: '仪陇县'
+					},
+					{
+						value: 2127,
+						label: '西充县'
+					},
+					{
+						value: 2128,
+						label: '阆中'
+					}
+				]
+			},
+			{
+				value: 246,
+				label: '眉山',
+				children: [{
+						value: 2129,
+						label: '东坡区'
+					},
+					{
+						value: 2130,
+						label: '仁寿县'
+					},
+					{
+						value: 2131,
+						label: '彭山县'
+					},
+					{
+						value: 2132,
+						label: '洪雅县'
+					},
+					{
+						value: 2133,
+						label: '丹棱县'
+					},
+					{
+						value: 2134,
+						label: '青神县'
+					}
+				]
+			},
+			{
+				value: 247,
+				label: '宜宾',
+				children: [{
+						value: 2135,
+						label: '翠屏区'
+					},
+					{
+						value: 2136,
+						label: '宜宾县'
+					},
+					{
+						value: 2137,
+						label: '南溪县'
+					},
+					{
+						value: 2138,
+						label: '江安县'
+					},
+					{
+						value: 2139,
+						label: '长宁县'
+					},
+					{
+						value: 2140,
+						label: '高县'
+					},
+					{
+						value: 2141,
+						label: '珙县'
+					},
+					{
+						value: 2142,
+						label: '筠连县'
+					},
+					{
+						value: 2143,
+						label: '兴文县'
+					},
+					{
+						value: 2144,
+						label: '屏山县'
+					}
+				]
+			},
+			{
+				value: 248,
+				label: '广安',
+				children: [{
+						value: 2145,
+						label: '广安区'
+					},
+					{
+						value: 2146,
+						label: '岳池县'
+					},
+					{
+						value: 2147,
+						label: '武胜县'
+					},
+					{
+						value: 2148,
+						label: '邻水县'
+					},
+					{
+						value: 2149,
+						label: '华蓥'
+					}
+				]
+			},
+			{
+				value: 249,
+				label: '达州',
+				children: [{
+						value: 2150,
+						label: '通川区'
+					},
+					{
+						value: 2151,
+						label: '达县'
+					},
+					{
+						value: 2152,
+						label: '宣汉县'
+					},
+					{
+						value: 2153,
+						label: '开江县'
+					},
+					{
+						value: 2154,
+						label: '大竹县'
+					},
+					{
+						value: 2155,
+						label: '渠县'
+					},
+					{
+						value: 2156,
+						label: '万源'
+					}
+				]
+			},
+			{
+				value: 250,
+				label: '雅安',
+				children: [{
+						value: 2157,
+						label: '雨城区'
+					},
+					{
+						value: 2158,
+						label: '名山县'
+					},
+					{
+						value: 2159,
+						label: '荥经县'
+					},
+					{
+						value: 2160,
+						label: '汉源县'
+					},
+					{
+						value: 2161,
+						label: '石棉县'
+					},
+					{
+						value: 2162,
+						label: '天全县'
+					},
+					{
+						value: 2163,
+						label: '芦山县'
+					},
+					{
+						value: 2164,
+						label: '宝兴县'
+					}
+				]
+			},
+			{
+				value: 251,
+				label: '巴中',
+				children: [{
+						value: 2165,
+						label: '巴州区'
+					},
+					{
+						value: 2166,
+						label: '通江县'
+					},
+					{
+						value: 2167,
+						label: '南江县'
+					},
+					{
+						value: 2168,
+						label: '平昌县'
+					}
+				]
+			},
+			{
+				value: 252,
+				label: '资阳',
+				children: [{
+						value: 2169,
+						label: '雁江区'
+					},
+					{
+						value: 2170,
+						label: '安岳县'
+					},
+					{
+						value: 2171,
+						label: '乐至县'
+					},
+					{
+						value: 2172,
+						label: '简阳'
+					}
+				]
+			},
+			{
+				value: 253,
+				label: '阿坝',
+				children: [{
+						value: 2173,
+						label: '汶川县'
+					},
+					{
+						value: 2174,
+						label: '理县'
+					},
+					{
+						value: 2175,
+						label: '茂县'
+					},
+					{
+						value: 2176,
+						label: '松潘县'
+					},
+					{
+						value: 2177,
+						label: '九寨沟县'
+					},
+					{
+						value: 2178,
+						label: '金川县'
+					},
+					{
+						value: 2179,
+						label: '小金县'
+					},
+					{
+						value: 2180,
+						label: '黑水县'
+					},
+					{
+						value: 2181,
+						label: '马尔康县'
+					},
+					{
+						value: 2182,
+						label: '壤塘县'
+					},
+					{
+						value: 2183,
+						label: '阿坝县'
+					},
+					{
+						value: 2184,
+						label: '若尔盖县'
+					},
+					{
+						value: 2185,
+						label: '红原县'
+					}
+				]
+			},
+			{
+				value: 254,
+				label: '甘孜',
+				children: [{
+						value: 2186,
+						label: '康定县'
+					},
+					{
+						value: 2187,
+						label: '泸定县'
+					},
+					{
+						value: 2188,
+						label: '丹巴县'
+					},
+					{
+						value: 2189,
+						label: '九龙县'
+					},
+					{
+						value: 2190,
+						label: '雅江县'
+					},
+					{
+						value: 2191,
+						label: '道孚县'
+					},
+					{
+						value: 2192,
+						label: '炉霍县'
+					},
+					{
+						value: 2193,
+						label: '甘孜县'
+					},
+					{
+						value: 2194,
+						label: '新龙县'
+					},
+					{
+						value: 2195,
+						label: '德格县'
+					},
+					{
+						value: 2196,
+						label: '白玉县'
+					},
+					{
+						value: 2197,
+						label: '石渠县'
+					},
+					{
+						value: 2198,
+						label: '色达县'
+					},
+					{
+						value: 2199,
+						label: '理塘县'
+					},
+					{
+						value: 2200,
+						label: '巴塘县'
+					},
+					{
+						value: 2201,
+						label: '乡城县'
+					},
+					{
+						value: 2202,
+						label: '稻城县'
+					},
+					{
+						value: 2203,
+						label: '得荣县'
+					}
+				]
+			},
+			{
+				value: 255,
+				label: '凉山',
+				children: [{
+						value: 2204,
+						label: '西昌'
+					},
+					{
+						value: 2205,
+						label: '木里藏族自治县'
+					},
+					{
+						value: 2206,
+						label: '盐源县'
+					},
+					{
+						value: 2207,
+						label: '德昌县'
+					},
+					{
+						value: 2208,
+						label: '会理县'
+					},
+					{
+						value: 2209,
+						label: '会东县'
+					},
+					{
+						value: 2210,
+						label: '宁南县'
+					},
+					{
+						value: 2211,
+						label: '普格县'
+					},
+					{
+						value: 2212,
+						label: '布拖县'
+					},
+					{
+						value: 2213,
+						label: '金阳县'
+					},
+					{
+						value: 2214,
+						label: '昭觉县'
+					},
+					{
+						value: 2215,
+						label: '喜德县'
+					},
+					{
+						value: 2216,
+						label: '冕宁县'
+					},
+					{
+						value: 2217,
+						label: '越西县'
+					},
+					{
+						value: 2218,
+						label: '甘洛县'
+					},
+					{
+						value: 2219,
+						label: '美姑县'
+					},
+					{
+						value: 2220,
+						label: '雷波县'
+					}
+				]
+			}
+		]
+	},
+	{
+		value: 24,
+		label: '贵州',
+		children: [{
+				value: 256,
+				label: '贵阳',
+				children: [{
+						value: 2221,
+						label: '南明区'
+					},
+					{
+						value: 2222,
+						label: '云岩区'
+					},
+					{
+						value: 2223,
+						label: '花溪区'
+					},
+					{
+						value: 2224,
+						label: '乌当区'
+					},
+					{
+						value: 2225,
+						label: '白云区'
+					},
+					{
+						value: 2226,
+						label: '小河区'
+					},
+					{
+						value: 2227,
+						label: '开阳县'
+					},
+					{
+						value: 2228,
+						label: '息烽县'
+					},
+					{
+						value: 2229,
+						label: '修文县'
+					},
+					{
+						value: 2230,
+						label: '清镇'
+					},
+					{
+						value: 2231,
+						label: '观山湖区'
+					},
+				]
+			},
+			{
+				value: 257,
+				label: '六盘水',
+				children: [{
+						value: 2231,
+						label: '钟山区'
+					},
+					{
+						value: 2232,
+						label: '六枝特区'
+					},
+					{
+						value: 2233,
+						label: '水城县'
+					},
+					{
+						value: 2234,
+						label: '盘县'
+					}
+				]
+			},
+			{
+				value: 258,
+				label: '遵义',
+				children: [{
+						value: 2235,
+						label: '红花岗区'
+					},
+					{
+						value: 2236,
+						label: '汇川区'
+					},
+					{
+						value: 2237,
+						label: '遵义县'
+					},
+					{
+						value: 2238,
+						label: '桐梓县'
+					},
+					{
+						value: 2239,
+						label: '绥阳县'
+					},
+					{
+						value: 2240,
+						label: '正安县'
+					},
+					{
+						value: 2241,
+						label: '道真仡佬族苗族自治县'
+					},
+					{
+						value: 2242,
+						label: '务川仡佬族苗族自治县'
+					},
+					{
+						value: 2243,
+						label: '凤冈县'
+					},
+					{
+						value: 2244,
+						label: '湄潭县'
+					},
+					{
+						value: 2245,
+						label: '余庆县'
+					},
+					{
+						value: 2246,
+						label: '习水县'
+					},
+					{
+						value: 2247,
+						label: '赤水'
+					},
+					{
+						value: 2248,
+						label: '仁怀'
+					}
+				]
+			},
+			{
+				value: 259,
+				label: '安顺',
+				children: [{
+						value: 2249,
+						label: '西秀区'
+					},
+					{
+						value: 2250,
+						label: '平坝县'
+					},
+					{
+						value: 2251,
+						label: '普定县'
+					},
+					{
+						value: 2252,
+						label: '镇宁布依族苗族自治县'
+					},
+					{
+						value: 2253,
+						label: '关岭布依族苗族自治县'
+					},
+					{
+						value: 2254,
+						label: '紫云苗族布依族自治县'
+					}
+				]
+			},
+			{
+				value: 260,
+				label: '铜仁地区',
+				children: [{
+						value: 2255,
+						label: '铜仁'
+					},
+					{
+						value: 2256,
+						label: '江口县'
+					},
+					{
+						value: 2257,
+						label: '玉屏侗族自治县'
+					},
+					{
+						value: 2258,
+						label: '石阡县'
+					},
+					{
+						value: 2259,
+						label: '思南县'
+					},
+					{
+						value: 2260,
+						label: '印江土家族苗族自治县'
+					},
+					{
+						value: 2261,
+						label: '德江县'
+					},
+					{
+						value: 2262,
+						label: '沿河土家族自治县'
+					},
+					{
+						value: 2263,
+						label: '松桃苗族自治县'
+					},
+					{
+						value: 2264,
+						label: '万山特区'
+					}
+				]
+			},
+			{
+				value: 261,
+				label: '黔西',
+				children: [{
+						value: 2265,
+						label: '兴义'
+					},
+					{
+						value: 2266,
+						label: '兴仁县'
+					},
+					{
+						value: 2267,
+						label: '普安县'
+					},
+					{
+						value: 2268,
+						label: '晴隆县'
+					},
+					{
+						value: 2269,
+						label: '贞丰县'
+					},
+					{
+						value: 2270,
+						label: '望谟县'
+					},
+					{
+						value: 2271,
+						label: '册亨县'
+					},
+					{
+						value: 2272,
+						label: '安龙县'
+					}
+				]
+			},
+			{
+				value: 262,
+				label: '毕节地区',
+				children: [{
+						value: 2273,
+						label: '毕节'
+					},
+					{
+						value: 2274,
+						label: '大方县'
+					},
+					{
+						value: 2275,
+						label: '黔西县'
+					},
+					{
+						value: 2276,
+						label: '金沙县'
+					},
+					{
+						value: 2277,
+						label: '织金县'
+					},
+					{
+						value: 2278,
+						label: '纳雍县'
+					},
+					{
+						value: 2279,
+						label: '威宁彝族回族苗族自治县'
+					},
+					{
+						value: 2280,
+						label: '赫章县'
+					}
+				]
+			},
+			{
+				value: 263,
+				label: '黔东',
+				children: [{
+						value: 2281,
+						label: '凯里'
+					},
+					{
+						value: 2282,
+						label: '黄平县'
+					},
+					{
+						value: 2283,
+						label: '施秉县'
+					},
+					{
+						value: 2284,
+						label: '三穗县'
+					},
+					{
+						value: 2285,
+						label: '镇远县'
+					},
+					{
+						value: 2286,
+						label: '岑巩县'
+					},
+					{
+						value: 2287,
+						label: '天柱县'
+					},
+					{
+						value: 2288,
+						label: '锦屏县'
+					},
+					{
+						value: 2289,
+						label: '剑河县'
+					},
+					{
+						value: 2290,
+						label: '台江县'
+					},
+					{
+						value: 2291,
+						label: '黎平县'
+					},
+					{
+						value: 2292,
+						label: '榕江县'
+					},
+					{
+						value: 2293,
+						label: '从江县'
+					},
+					{
+						value: 2294,
+						label: '雷山县'
+					},
+					{
+						value: 2295,
+						label: '麻江县'
+					},
+					{
+						value: 2296,
+						label: '丹寨县'
+					}
+				]
+			},
+			{
+				value: 264,
+				label: '黔南',
+				children: [{
+						value: 2297,
+						label: '都匀'
+					},
+					{
+						value: 2298,
+						label: '福泉'
+					},
+					{
+						value: 2299,
+						label: '荔波县'
+					},
+					{
+						value: 2300,
+						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: 25,
+		label: '云南',
+		children: [{
+				value: 265,
+				label: '昆明',
+				children: [{
+						value: 2309,
+						label: '五华区'
+					},
+					{
+						value: 2310,
+						label: '盘龙区'
+					},
+					{
+						value: 2311,
+						label: '官渡区'
+					},
+					{
+						value: 2312,
+						label: '西山区'
+					},
+					{
+						value: 2313,
+						label: '东川区'
+					},
+					{
+						value: 2314,
+						label: '呈贡县'
+					},
+					{
+						value: 2315,
+						label: '晋宁县'
+					},
+					{
+						value: 2316,
+						label: '富民县'
+					},
+					{
+						value: 2317,
+						label: '宜良县'
+					},
+					{
+						value: 2318,
+						label: '石林彝族自治县'
+					},
+					{
+						value: 2319,
+						label: '嵩明县'
+					},
+					{
+						value: 2320,
+						label: '禄劝彝族苗族自治县'
+					},
+					{
+						value: 2321,
+						label: '寻甸回族彝族自治县'
+					},
+					{
+						value: 2322,
+						label: '安宁'
+					}
+				]
+			},
+			{
+				value: 266,
+				label: '曲靖',
+				children: [{
+						value: 2323,
+						label: '麒麟区'
+					},
+					{
+						value: 2324,
+						label: '马龙县'
+					},
+					{
+						value: 2325,
+						label: '陆良县'
+					},
+					{
+						value: 2326,
+						label: '师宗县'
+					},
+					{
+						value: 2327,
+						label: '罗平县'
+					},
+					{
+						value: 2328,
+						label: '富源县'
+					},
+					{
+						value: 2329,
+						label: '会泽县'
+					},
+					{
+						value: 2330,
+						label: '沾益县'
+					},
+					{
+						value: 2331,
+						label: '宣威'
+					}
+				]
+			},
+			{
+				value: 267,
+				label: '玉溪',
+				children: [{
+						value: 2332,
+						label: '红塔区'
+					},
+					{
+						value: 2333,
+						label: '江川县'
+					},
+					{
+						value: 2334,
+						label: '澄江县'
+					},
+					{
+						value: 2335,
+						label: '通海县'
+					},
+					{
+						value: 2336,
+						label: '华宁县'
+					},
+					{
+						value: 2337,
+						label: '易门县'
+					},
+					{
+						value: 2338,
+						label: '峨山彝族自治县'
+					},
+					{
+						value: 2339,
+						label: '新平彝族傣族自治县'
+					},
+					{
+						value: 2340,
+						label: '元江哈尼族彝族傣族自治县'
+					}
+				]
+			},
+			{
+				value: 268,
+				label: '保山',
+				children: [{
+						value: 2341,
+						label: '隆阳区'
+					},
+					{
+						value: 2342,
+						label: '施甸县'
+					},
+					{
+						value: 2343,
+						label: '腾冲县'
+					},
+					{
+						value: 2344,
+						label: '龙陵县'
+					},
+					{
+						value: 2345,
+						label: '昌宁县'
+					}
+				]
+			},
+			{
+				value: 269,
+				label: '昭通',
+				children: [{
+						value: 2346,
+						label: '昭阳区'
+					},
+					{
+						value: 2347,
+						label: '鲁甸县'
+					},
+					{
+						value: 2348,
+						label: '巧家县'
+					},
+					{
+						value: 2349,
+						label: '盐津县'
+					},
+					{
+						value: 2350,
+						label: '大关县'
+					},
+					{
+						value: 2351,
+						label: '永善县'
+					},
+					{
+						value: 2352,
+						label: '绥江县'
+					},
+					{
+						value: 2353,
+						label: '镇雄县'
+					},
+					{
+						value: 2354,
+						label: '彝良县'
+					},
+					{
+						value: 2355,
+						label: '威信县'
+					},
+					{
+						value: 2356,
+						label: '水富县'
+					}
+				]
+			},
+			{
+				value: 270,
+				label: '丽江',
+				children: [{
+						value: 2357,
+						label: '古城区'
+					},
+					{
+						value: 2358,
+						label: '玉龙纳西族自治县'
+					},
+					{
+						value: 2359,
+						label: '永胜县'
+					},
+					{
+						value: 2360,
+						label: '华坪县'
+					},
+					{
+						value: 2361,
+						label: '宁蒗彝族自治县'
+					}
+				]
+			},
+			{
+				value: 271,
+				label: '思茅',
+				children: [{
+						value: 2362,
+						label: '翠云区'
+					},
+					{
+						value: 2363,
+						label: '普洱哈尼族彝族自治县'
+					},
+					{
+						value: 2364,
+						label: '墨江哈尼族自治县'
+					},
+					{
+						value: 2365,
+						label: '景东彝族自治县'
+					},
+					{
+						value: 2366,
+						label: '景谷傣族彝族自治县'
+					},
+					{
+						value: 2367,
+						label: '镇沅彝族哈尼族拉祜族自治县'
+					},
+					{
+						value: 2368,
+						label: '江城哈尼族彝族自治县'
+					},
+					{
+						value: 2369,
+						label: '孟连傣族拉祜族佤族自治县'
+					},
+					{
+						value: 2370,
+						label: '澜沧拉祜族自治县'
+					},
+					{
+						value: 2371,
+						label: '西盟佤族自治县'
+					}
+				]
+			},
+			{
+				value: 272,
+				label: '临沧',
+				children: [{
+						value: 2372,
+						label: '临翔区'
+					},
+					{
+						value: 2373,
+						label: '凤庆县'
+					},
+					{
+						value: 2374,
+						label: '云县'
+					},
+					{
+						value: 2375,
+						label: '永德县'
+					},
+					{
+						value: 2376,
+						label: '镇康县'
+					},
+					{
+						value: 2377,
+						label: '双江拉祜族佤族布朗族傣族自治县'
+					},
+					{
+						value: 2378,
+						label: '耿马傣族佤族自治县'
+					},
+					{
+						value: 2379,
+						label: '沧源佤族自治县'
+					}
+				]
+			},
+			{
+				value: 273,
+				label: '楚雄',
+				children: [{
+						value: 2380,
+						label: '楚雄'
+					},
+					{
+						value: 2381,
+						label: '双柏县'
+					},
+					{
+						value: 2382,
+						label: '牟定县'
+					},
+					{
+						value: 2383,
+						label: '南华县'
+					},
+					{
+						value: 2384,
+						label: '姚安县'
+					},
+					{
+						value: 2385,
+						label: '大姚县'
+					},
+					{
+						value: 2386,
+						label: '永仁县'
+					},
+					{
+						value: 2387,
+						label: '元谋县'
+					},
+					{
+						value: 2388,
+						label: '武定县'
+					},
+					{
+						value: 2389,
+						label: '禄丰县'
+					}
+				]
+			},
+			{
+				value: 274,
+				label: '红河',
+				children: [{
+						value: 2390,
+						label: '个旧'
+					},
+					{
+						value: 2391,
+						label: '开远'
+					},
+					{
+						value: 2392,
+						label: '蒙自县'
+					},
+					{
+						value: 2393,
+						label: '屏边苗族自治县'
+					},
+					{
+						value: 2394,
+						label: '建水县'
+					},
+					{
+						value: 2395,
+						label: '石屏县'
+					},
+					{
+						value: 2396,
+						label: '弥勒县'
+					},
+					{
+						value: 2397,
+						label: '泸西县'
+					},
+					{
+						value: 2398,
+						label: '元阳县'
+					},
+					{
+						value: 2399,
+						label: '红河县'
+					},
+					{
+						value: 2400,
+						label: '金平苗族瑶族傣族自治县'
+					},
+					{
+						value: 2401,
+						label: '绿春县'
+					},
+					{
+						value: 2402,
+						label: '河口瑶族自治县'
+					}
+				]
+			},
+			{
+				value: 275,
+				label: '文山',
+				children: [{
+						value: 2403,
+						label: '文山县'
+					},
+					{
+						value: 2404,
+						label: '砚山县'
+					},
+					{
+						value: 2405,
+						label: '西畴县'
+					},
+					{
+						value: 2406,
+						label: '麻栗坡县'
+					},
+					{
+						value: 2407,
+						label: '马关县'
+					},
+					{
+						value: 2408,
+						label: '丘北县'
+					},
+					{
+						value: 2409,
+						label: '广南县'
+					},
+					{
+						value: 2410,
+						label: '富宁县'
+					}
+				]
+			},
+			{
+				value: 276,
+				label: '西双版纳',
+				children: [{
+						value: 2411,
+						label: '景洪'
+					},
+					{
+						value: 2412,
+						label: '勐海县'
+					},
+					{
+						value: 2413,
+						label: '勐腊县'
+					}
+				]
+			},
+			{
+				value: 277,
+				label: '大理',
+				children: [{
+						value: 2414,
+						label: '大理'
+					},
+					{
+						value: 2415,
+						label: '漾濞彝族自治县'
+					},
+					{
+						value: 2416,
+						label: '祥云县'
+					},
+					{
+						value: 2417,
+						label: '宾川县'
+					},
+					{
+						value: 2418,
+						label: '弥渡县'
+					},
+					{
+						value: 2419,
+						label: '南涧彝族自治县'
+					},
+					{
+						value: 2420,
+						label: '巍山彝族回族自治县'
+					},
+					{
+						value: 2421,
+						label: '永平县'
+					},
+					{
+						value: 2422,
+						label: '云龙县'
+					},
+					{
+						value: 2423,
+						label: '洱源县'
+					},
+					{
+						value: 2424,
+						label: '剑川县'
+					},
+					{
+						value: 2425,
+						label: '鹤庆县'
+					}
+				]
+			},
+			{
+				value: 278,
+				label: '德宏',
+				children: [{
+						value: 2426,
+						label: '瑞丽'
+					},
+					{
+						value: 2427,
+						label: '潞西'
+					},
+					{
+						value: 2428,
+						label: '梁河县'
+					},
+					{
+						value: 2429,
+						label: '盈江县'
+					},
+					{
+						value: 2430,
+						label: '陇川县'
+					}
+				]
+			},
+			{
+				value: 279,
+				label: '怒江',
+				children: [{
+						value: 2431,
+						label: '泸水县'
+					},
+					{
+						value: 2432,
+						label: '福贡县'
+					},
+					{
+						value: 2433,
+						label: '贡山独龙族怒族自治县'
+					},
+					{
+						value: 2434,
+						label: '兰坪白族普米族自治县'
+					}
+				]
+			},
+			{
+				value: 280,
+				label: '迪庆',
+				children: [{
+						value: 2435,
+						label: '香格里拉县'
+					},
+					{
+						value: 2436,
+						label: '德钦县'
+					},
+					{
+						value: 2437,
+						label: '维西傈僳族自治县'
+					}
+				]
+			}
+		]
+	},
+	{
+		value: 26,
+		label: '西藏',
+		children: [{
+				value: 281,
+				label: '拉萨',
+				children: [{
+						value: 2438,
+						label: '城关区'
+					},
+					{
+						value: 2439,
+						label: '林周县'
+					},
+					{
+						value: 2440,
+						label: '当雄县'
+					},
+					{
+						value: 2441,
+						label: '尼木县'
+					},
+					{
+						value: 2442,
+						label: '曲水县'
+					},
+					{
+						value: 2443,
+						label: '堆龙德庆县'
+					},
+					{
+						value: 2444,
+						label: '达孜县'
+					},
+					{
+						value: 2445,
+						label: '墨竹工卡县'
+					}
+				]
+			},
+			{
+				value: 282,
+				label: '昌都地区',
+				children: [{
+						value: 2446,
+						label: '昌都县'
+					},
+					{
+						value: 2447,
+						label: '江达县'
+					},
+					{
+						value: 2448,
+						label: '贡觉县'
+					},
+					{
+						value: 2449,
+						label: '类乌齐县'
+					},
+					{
+						value: 2450,
+						label: '丁青县'
+					},
+					{
+						value: 2451,
+						label: '察雅县'
+					},
+					{
+						value: 2452,
+						label: '八宿县'
+					},
+					{
+						value: 2453,
+						label: '左贡县'
+					},
+					{
+						value: 2454,
+						label: '芒康县'
+					},
+					{
+						value: 2455,
+						label: '洛隆县'
+					},
+					{
+						value: 2456,
+						label: '边坝县'
+					}
+				]
+			},
+			{
+				value: 283,
+				label: '山南地区',
+				children: [{
+						value: 2457,
+						label: '乃东县'
+					},
+					{
+						value: 2458,
+						label: '扎囊县'
+					},
+					{
+						value: 2459,
+						label: '贡嘎县'
+					},
+					{
+						value: 2460,
+						label: '桑日县'
+					},
+					{
+						value: 2461,
+						label: '琼结县'
+					},
+					{
+						value: 2462,
+						label: '曲松县'
+					},
+					{
+						value: 2463,
+						label: '措美县'
+					},
+					{
+						value: 2464,
+						label: '洛扎县'
+					},
+					{
+						value: 2465,
+						label: '加查县'
+					},
+					{
+						value: 2466,
+						label: '隆子县'
+					},
+					{
+						value: 2467,
+						label: '错那县'
+					},
+					{
+						value: 2468,
+						label: '浪卡子县'
+					}
+				]
+			},
+			{
+				value: 284,
+				label: '日喀则地区',
+				children: [{
+						value: 2469,
+						label: '日喀则'
+					},
+					{
+						value: 2470,
+						label: '南木林县'
+					},
+					{
+						value: 2471,
+						label: '江孜县'
+					},
+					{
+						value: 2472,
+						label: '定日县'
+					},
+					{
+						value: 2473,
+						label: '萨迦县'
+					},
+					{
+						value: 2474,
+						label: '拉孜县'
+					},
+					{
+						value: 2475,
+						label: '昂仁县'
+					},
+					{
+						value: 2476,
+						label: '谢通门县'
+					},
+					{
+						value: 2477,
+						label: '白朗县'
+					},
+					{
+						value: 2478,
+						label: '仁布县'
+					},
+					{
+						value: 2479,
+						label: '康马县'
+					},
+					{
+						value: 2480,
+						label: '定结县'
+					},
+					{
+						value: 2481,
+						label: '仲巴县'
+					},
+					{
+						value: 2482,
+						label: '亚东县'
+					},
+					{
+						value: 2483,
+						label: '吉隆县'
+					},
+					{
+						value: 2484,
+						label: '聂拉木县'
+					},
+					{
+						value: 2485,
+						label: '萨嘎县'
+					},
+					{
+						value: 2486,
+						label: '岗巴县'
+					}
+				]
+			},
+			{
+				value: 285,
+				label: '那曲地区',
+				children: [{
+						value: 2487,
+						label: '那曲县'
+					},
+					{
+						value: 2488,
+						label: '嘉黎县'
+					},
+					{
+						value: 2489,
+						label: '比如县'
+					},
+					{
+						value: 2490,
+						label: '聂荣县'
+					},
+					{
+						value: 2491,
+						label: '安多县'
+					},
+					{
+						value: 2492,
+						label: '申扎县'
+					},
+					{
+						value: 2493,
+						label: '索县'
+					},
+					{
+						value: 2494,
+						label: '班戈县'
+					},
+					{
+						value: 2495,
+						label: '巴青县'
+					},
+					{
+						value: 2496,
+						label: '尼玛县'
+					}
+				]
+			},
+			{
+				value: 286,
+				label: '阿里地区',
+				children: [{
+						value: 2497,
+						label: '普兰县'
+					},
+					{
+						value: 2498,
+						label: '札达县'
+					},
+					{
+						value: 2499,
+						label: '噶尔县'
+					},
+					{
+						value: 2500,
+						label: '日土县'
+					},
+					{
+						value: 2501,
+						label: '革吉县'
+					},
+					{
+						value: 2502,
+						label: '改则县'
+					},
+					{
+						value: 2503,
+						label: '措勤县'
+					}
+				]
+			},
+			{
+				value: 287,
+				label: '林芝地区',
+				children: [{
+						value: 2504,
+						label: '林芝县'
+					},
+					{
+						value: 2505,
+						label: '工布江达县'
+					},
+					{
+						value: 2506,
+						label: '米林县'
+					},
+					{
+						value: 2507,
+						label: '墨脱县'
+					},
+					{
+						value: 2508,
+						label: '波密县'
+					},
+					{
+						value: 2509,
+						label: '察隅县'
+					},
+					{
+						value: 2510,
+						label: '朗县'
+					}
+				]
+			}
+		]
+	},
+	{
+		value: 27,
+		label: '陕西',
+		children: [{
+				value: 288,
+				label: '西安',
+				children: [{
+						value: 2511,
+						label: '新城区'
+					},
+					{
+						value: 2512,
+						label: '碑林区'
+					},
+					{
+						value: 2513,
+						label: '莲湖区'
+					},
+					{
+						value: 2514,
+						label: '灞桥区'
+					},
+					{
+						value: 2515,
+						label: '未央区'
+					},
+					{
+						value: 2516,
+						label: '雁塔区'
+					},
+					{
+						value: 2517,
+						label: '阎良区'
+					},
+					{
+						value: 2518,
+						label: '临潼区'
+					},
+					{
+						value: 2519,
+						label: '长安区'
+					},
+					{
+						value: 2520,
+						label: '蓝田县'
+					},
+					{
+						value: 2521,
+						label: '周至县'
+					},
+					{
+						value: 2522,
+						label: '户县'
+					},
+					{
+						value: 2523,
+						label: '高陵县'
+					}
+				]
+			},
+			{
+				value: 289,
+				label: '铜川',
+				children: [{
+						value: 2524,
+						label: '王益区'
+					},
+					{
+						value: 2525,
+						label: '印台区'
+					},
+					{
+						value: 2526,
+						label: '耀州区'
+					},
+					{
+						value: 2527,
+						label: '宜君县'
+					}
+				]
+			},
+			{
+				value: 290,
+				label: '宝鸡',
+				children: [{
+						value: 2528,
+						label: '渭滨区'
+					},
+					{
+						value: 2529,
+						label: '金台区'
+					},
+					{
+						value: 2530,
+						label: '陈仓区'
+					},
+					{
+						value: 2531,
+						label: '凤翔县'
+					},
+					{
+						value: 2532,
+						label: '岐山县'
+					},
+					{
+						value: 2533,
+						label: '扶风县'
+					},
+					{
+						value: 2534,
+						label: '眉县'
+					},
+					{
+						value: 2535,
+						label: '陇县'
+					},
+					{
+						value: 2536,
+						label: '千阳县'
+					},
+					{
+						value: 2537,
+						label: '麟游县'
+					},
+					{
+						value: 2538,
+						label: '凤县'
+					},
+					{
+						value: 2539,
+						label: '太白县'
+					}
+				]
+			},
+			{
+				value: 291,
+				label: '咸阳',
+				children: [{
+						value: 2540,
+						label: '秦都区'
+					},
+					{
+						value: 2541,
+						label: '杨凌区'
+					},
+					{
+						value: 2542,
+						label: '渭城区'
+					},
+					{
+						value: 2543,
+						label: '三原县'
+					},
+					{
+						value: 2544,
+						label: '泾阳县'
+					},
+					{
+						value: 2545,
+						label: '乾县'
+					},
+					{
+						value: 2546,
+						label: '礼泉县'
+					},
+					{
+						value: 2547,
+						label: '永寿县'
+					},
+					{
+						value: 2548,
+						label: '彬县'
+					},
+					{
+						value: 2549,
+						label: '长武县'
+					},
+					{
+						value: 2550,
+						label: '旬邑县'
+					},
+					{
+						value: 2551,
+						label: '淳化县'
+					},
+					{
+						value: 2552,
+						label: '武功县'
+					},
+					{
+						value: 2553,
+						label: '兴平'
+					}
+				]
+			},
+			{
+				value: 292,
+				label: '渭南',
+				children: [{
+						value: 2554,
+						label: '临渭区'
+					},
+					{
+						value: 2555,
+						label: '华县'
+					},
+					{
+						value: 2556,
+						label: '潼关县'
+					},
+					{
+						value: 2557,
+						label: '大荔县'
+					},
+					{
+						value: 2558,
+						label: '合阳县'
+					},
+					{
+						value: 2559,
+						label: '澄城县'
+					},
+					{
+						value: 2560,
+						label: '蒲城县'
+					},
+					{
+						value: 2561,
+						label: '白水县'
+					},
+					{
+						value: 2562,
+						label: '富平县'
+					},
+					{
+						value: 2563,
+						label: '韩城'
+					},
+					{
+						value: 2564,
+						label: '华阴'
+					}
+				]
+			},
+			{
+				value: 293,
+				label: '延安',
+				children: [{
+						value: 2565,
+						label: '宝塔区'
+					},
+					{
+						value: 2566,
+						label: '延长县'
+					},
+					{
+						value: 2567,
+						label: '延川县'
+					},
+					{
+						value: 2568,
+						label: '子长县'
+					},
+					{
+						value: 2569,
+						label: '安塞县'
+					},
+					{
+						value: 2570,
+						label: '志丹县'
+					},
+					{
+						value: 2571,
+						label: '吴旗县'
+					},
+					{
+						value: 2572,
+						label: '甘泉县'
+					},
+					{
+						value: 2573,
+						label: '富县'
+					},
+					{
+						value: 2574,
+						label: '洛川县'
+					},
+					{
+						value: 2575,
+						label: '宜川县'
+					},
+					{
+						value: 2576,
+						label: '黄龙县'
+					},
+					{
+						value: 2577,
+						label: '黄陵县'
+					}
+				]
+			},
+			{
+				value: 294,
+				label: '汉中',
+				children: [{
+						value: 2578,
+						label: '汉台区'
+					},
+					{
+						value: 2579,
+						label: '南郑县'
+					},
+					{
+						value: 2580,
+						label: '城固县'
+					},
+					{
+						value: 2581,
+						label: '洋县'
+					},
+					{
+						value: 2582,
+						label: '西乡县'
+					},
+					{
+						value: 2583,
+						label: '勉县'
+					},
+					{
+						value: 2584,
+						label: '宁强县'
+					},
+					{
+						value: 2585,
+						label: '略阳县'
+					},
+					{
+						value: 2586,
+						label: '镇巴县'
+					},
+					{
+						value: 2587,
+						label: '留坝县'
+					},
+					{
+						value: 2588,
+						label: '佛坪县'
+					}
+				]
+			},
+			{
+				value: 295,
+				label: '榆林',
+				children: [{
+						value: 2589,
+						label: '榆阳区'
+					},
+					{
+						value: 2590,
+						label: '神木县'
+					},
+					{
+						value: 2591,
+						label: '府谷县'
+					},
+					{
+						value: 2592,
+						label: '横山县'
+					},
+					{
+						value: 2593,
+						label: '靖边县'
+					},
+					{
+						value: 2594,
+						label: '定边县'
+					},
+					{
+						value: 2595,
+						label: '绥德县'
+					},
+					{
+						value: 2596,
+						label: '米脂县'
+					},
+					{
+						value: 2597,
+						label: '佳县'
+					},
+					{
+						value: 2598,
+						label: '吴堡县'
+					},
+					{
+						value: 2599,
+						label: '清涧县'
+					},
+					{
+						value: 2600,
+						label: '子洲县'
+					}
+				]
+			},
+			{
+				value: 296,
+				label: '安康',
+				children: [{
+						value: 2601,
+						label: '汉滨区'
+					},
+					{
+						value: 2602,
+						label: '汉阴县'
+					},
+					{
+						value: 2603,
+						label: '石泉县'
+					},
+					{
+						value: 2604,
+						label: '宁陕县'
+					},
+					{
+						value: 2605,
+						label: '紫阳县'
+					},
+					{
+						value: 2606,
+						label: '岚皋县'
+					},
+					{
+						value: 2607,
+						label: '平利县'
+					},
+					{
+						value: 2608,
+						label: '镇坪县'
+					},
+					{
+						value: 2609,
+						label: '旬阳县'
+					},
+					{
+						value: 2610,
+						label: '白河县'
+					}
+				]
+			},
+			{
+				value: 297,
+				label: '商洛',
+				children: [{
+						value: 2611,
+						label: '商州区'
+					},
+					{
+						value: 2612,
+						label: '洛南县'
+					},
+					{
+						value: 2613,
+						label: '丹凤县'
+					},
+					{
+						value: 2614,
+						label: '商南县'
+					},
+					{
+						value: 2615,
+						label: '山阳县'
+					},
+					{
+						value: 2616,
+						label: '镇安县'
+					},
+					{
+						value: 2617,
+						label: '柞水县'
+					}
+				]
+			}
+		]
+	},
+	{
+		value: 28,
+		label: '甘肃',
+		children: [{
+				value: 298,
+				label: '兰州',
+				children: [{
+						value: 2618,
+						label: '城关区'
+					},
+					{
+						value: 2619,
+						label: '七里河区'
+					},
+					{
+						value: 2620,
+						label: '西固区'
+					},
+					{
+						value: 2621,
+						label: '安宁区'
+					},
+					{
+						value: 2622,
+						label: '红古区'
+					},
+					{
+						value: 2623,
+						label: '永登县'
+					},
+					{
+						value: 2624,
+						label: '皋兰县'
+					},
+					{
+						value: 2625,
+						label: '榆中县'
+					}
+				]
+			},
+			{
+				value: 299,
+				label: '嘉峪关',
+				children: []
+			},
+			{
+				value: 300,
+				label: '金昌',
+				children: [{
+						value: 2626,
+						label: '金川区'
+					},
+					{
+						value: 2627,
+						label: '永昌县'
+					}
+				]
+			},
+			{
+				value: 301,
+				label: '白银',
+				children: [{
+						value: 2628,
+						label: '白银区'
+					},
+					{
+						value: 2629,
+						label: '平川区'
+					},
+					{
+						value: 2630,
+						label: '靖远县'
+					},
+					{
+						value: 2631,
+						label: '会宁县'
+					},
+					{
+						value: 2632,
+						label: '景泰县'
+					}
+				]
+			},
+			{
+				value: 302,
+				label: '天水',
+				children: [{
+						value: 2633,
+						label: '秦城区'
+					},
+					{
+						value: 2634,
+						label: '北道区'
+					},
+					{
+						value: 2635,
+						label: '清水县'
+					},
+					{
+						value: 2636,
+						label: '秦安县'
+					},
+					{
+						value: 2637,
+						label: '甘谷县'
+					},
+					{
+						value: 2638,
+						label: '武山县'
+					},
+					{
+						value: 2639,
+						label: '张家川回族自治县'
+					}
+				]
+			},
+			{
+				value: 303,
+				label: '武威',
+				children: [{
+						value: 2640,
+						label: '凉州区'
+					},
+					{
+						value: 2641,
+						label: '民勤县'
+					},
+					{
+						value: 2642,
+						label: '古浪县'
+					},
+					{
+						value: 2643,
+						label: '天祝藏族自治县'
+					}
+				]
+			},
+			{
+				value: 304,
+				label: '张掖',
+				children: [{
+						value: 2644,
+						label: '甘州区'
+					},
+					{
+						value: 2645,
+						label: '肃南裕固族自治县'
+					},
+					{
+						value: 2646,
+						label: '民乐县'
+					},
+					{
+						value: 2647,
+						label: '临泽县'
+					},
+					{
+						value: 2648,
+						label: '高台县'
+					},
+					{
+						value: 2649,
+						label: '山丹县'
+					}
+				]
+			},
+			{
+				value: 305,
+				label: '平凉',
+				children: [{
+						value: 2650,
+						label: '崆峒区'
+					},
+					{
+						value: 2651,
+						label: '泾川县'
+					},
+					{
+						value: 2652,
+						label: '灵台县'
+					},
+					{
+						value: 2653,
+						label: '崇信县'
+					},
+					{
+						value: 2654,
+						label: '华亭县'
+					},
+					{
+						value: 2655,
+						label: '庄浪县'
+					},
+					{
+						value: 2656,
+						label: '静宁县'
+					}
+				]
+			},
+			{
+				value: 306,
+				label: '酒泉',
+				children: [{
+						value: 2657,
+						label: '肃州区'
+					},
+					{
+						value: 2658,
+						label: '金塔县'
+					},
+					{
+						value: 2659,
+						label: '安西县'
+					},
+					{
+						value: 2660,
+						label: '肃北蒙古族自治县'
+					},
+					{
+						value: 2661,
+						label: '阿克塞哈萨克族自治县'
+					},
+					{
+						value: 2662,
+						label: '玉门'
+					},
+					{
+						value: 2663,
+						label: '敦煌'
+					}
+				]
+			},
+			{
+				value: 307,
+				label: '庆阳',
+				children: [{
+						value: 2664,
+						label: '西峰区'
+					},
+					{
+						value: 2665,
+						label: '庆城县'
+					},
+					{
+						value: 2666,
+						label: '环县'
+					},
+					{
+						value: 2667,
+						label: '华池县'
+					},
+					{
+						value: 2668,
+						label: '合水县'
+					},
+					{
+						value: 2669,
+						label: '正宁县'
+					},
+					{
+						value: 2670,
+						label: '宁县'
+					},
+					{
+						value: 2671,
+						label: '镇原县'
+					}
+				]
+			},
+			{
+				value: 308,
+				label: '定西',
+				children: [{
+						value: 2672,
+						label: '安定区'
+					},
+					{
+						value: 2673,
+						label: '通渭县'
+					},
+					{
+						value: 2674,
+						label: '陇西县'
+					},
+					{
+						value: 2675,
+						label: '渭源县'
+					},
+					{
+						value: 2676,
+						label: '临洮县'
+					},
+					{
+						value: 2677,
+						label: '漳县'
+					},
+					{
+						value: 2678,
+						label: '岷县'
+					}
+				]
+			},
+			{
+				value: 309,
+				label: '陇南',
+				children: [{
+						value: 2679,
+						label: '武都区'
+					},
+					{
+						value: 2680,
+						label: '成县'
+					},
+					{
+						value: 2681,
+						label: '文县'
+					},
+					{
+						value: 2682,
+						label: '宕昌县'
+					},
+					{
+						value: 2683,
+						label: '康县'
+					},
+					{
+						value: 2684,
+						label: '西和县'
+					},
+					{
+						value: 2685,
+						label: '礼县'
+					},
+					{
+						value: 2686,
+						label: '徽县'
+					},
+					{
+						value: 2687,
+						label: '两当县'
+					}
+				]
+			},
+			{
+				value: 310,
+				label: '临夏',
+				children: [{
+						value: 2688,
+						label: '临夏'
+					},
+					{
+						value: 2689,
+						label: '临夏县'
+					},
+					{
+						value: 2690,
+						label: '康乐县'
+					},
+					{
+						value: 2691,
+						label: '永靖县'
+					},
+					{
+						value: 2692,
+						label: '广河县'
+					},
+					{
+						value: 2693,
+						label: '和政县'
+					},
+					{
+						value: 2694,
+						label: '东乡族自治县'
+					},
+					{
+						value: 2695,
+						label: '积石山保安族东乡族撒拉族自治县'
+					}
+				]
+			},
+			{
+				value: 311,
+				label: '甘南',
+				children: [{
+						value: 2696,
+						label: '合作'
+					},
+					{
+						value: 2697,
+						label: '临潭县'
+					},
+					{
+						value: 2698,
+						label: '卓尼县'
+					},
+					{
+						value: 2699,
+						label: '舟曲县'
+					},
+					{
+						value: 2700,
+						label: '迭部县'
+					},
+					{
+						value: 2701,
+						label: '玛曲县'
+					},
+					{
+						value: 2702,
+						label: '碌曲县'
+					},
+					{
+						value: 2703,
+						label: '夏河县'
+					}
+				]
+			}
+		]
+	},
+	{
+		value: 29,
+		label: '青海',
+		children: [{
+				value: 312,
+				label: '西宁',
+				children: [{
+						value: 2704,
+						label: '城东区'
+					},
+					{
+						value: 2705,
+						label: '城中区'
+					},
+					{
+						value: 2706,
+						label: '城西区'
+					},
+					{
+						value: 2707,
+						label: '城北区'
+					},
+					{
+						value: 2708,
+						label: '大通回族土族自治县'
+					},
+					{
+						value: 2709,
+						label: '湟中县'
+					},
+					{
+						value: 2710,
+						label: '湟源县'
+					}
+				]
+			},
+			{
+				value: 313,
+				label: '海东地区',
+				children: [{
+						value: 2711,
+						label: '平安县'
+					},
+					{
+						value: 2712,
+						label: '民和回族土族自治县'
+					},
+					{
+						value: 2713,
+						label: '乐都县'
+					},
+					{
+						value: 2714,
+						label: '互助土族自治县'
+					},
+					{
+						value: 2715,
+						label: '化隆回族自治县'
+					},
+					{
+						value: 2716,
+						label: '循化撒拉族自治县'
+					}
+				]
+			},
+			{
+				value: 314,
+				label: '海北',
+				children: [{
+						value: 2717,
+						label: '门源回族自治县'
+					},
+					{
+						value: 2718,
+						label: '祁连县'
+					},
+					{
+						value: 2719,
+						label: '海晏县'
+					},
+					{
+						value: 2720,
+						label: '刚察县'
+					}
+				]
+			},
+			{
+				value: 315,
+				label: '黄南',
+				children: [{
+						value: 2721,
+						label: '同仁县'
+					},
+					{
+						value: 2722,
+						label: '尖扎县'
+					},
+					{
+						value: 2723,
+						label: '泽库县'
+					},
+					{
+						value: 2724,
+						label: '河南蒙古族自治县'
+					}
+				]
+			},
+			{
+				value: 316,
+				label: '海南',
+				children: [{
+						value: 2725,
+						label: '共和县'
+					},
+					{
+						value: 2726,
+						label: '同德县'
+					},
+					{
+						value: 2727,
+						label: '贵德县'
+					},
+					{
+						value: 2728,
+						label: '兴海县'
+					},
+					{
+						value: 2729,
+						label: '贵南县'
+					}
+				]
+			},
+			{
+				value: 317,
+				label: '果洛',
+				children: [{
+						value: 2730,
+						label: '玛沁县'
+					},
+					{
+						value: 2731,
+						label: '班玛县'
+					},
+					{
+						value: 2732,
+						label: '甘德县'
+					},
+					{
+						value: 2733,
+						label: '达日县'
+					},
+					{
+						value: 2734,
+						label: '久治县'
+					},
+					{
+						value: 2735,
+						label: '玛多县'
+					}
+				]
+			},
+			{
+				value: 318,
+				label: '玉树',
+				children: [{
+						value: 2736,
+						label: '玉树县'
+					},
+					{
+						value: 2737,
+						label: '杂多县'
+					},
+					{
+						value: 2738,
+						label: '称多县'
+					},
+					{
+						value: 2739,
+						label: '治多县'
+					},
+					{
+						value: 2740,
+						label: '囊谦县'
+					},
+					{
+						value: 2741,
+						label: '曲麻莱县'
+					}
+				]
+			},
+			{
+				value: 319,
+				label: '海西',
+				children: [{
+						value: 2742,
+						label: '格尔木'
+					},
+					{
+						value: 2743,
+						label: '德令哈'
+					},
+					{
+						value: 2744,
+						label: '乌兰县'
+					},
+					{
+						value: 2745,
+						label: '都兰县'
+					},
+					{
+						value: 2746,
+						label: '天峻县'
+					}
+				]
+			}
+		]
+	},
+	{
+		value: 30,
+		label: '宁夏',
+		children: [{
+				value: 320,
+				label: '银川',
+				children: [{
+						value: 2747,
+						label: '兴庆区'
+					},
+					{
+						value: 2748,
+						label: '西夏区'
+					},
+					{
+						value: 2749,
+						label: '金凤区'
+					},
+					{
+						value: 2750,
+						label: '永宁县'
+					},
+					{
+						value: 2751,
+						label: '贺兰县'
+					},
+					{
+						value: 2752,
+						label: '灵武'
+					}
+				]
+			},
+			{
+				value: 321,
+				label: '石嘴山',
+				children: [{
+						value: 2753,
+						label: '大武口区'
+					},
+					{
+						value: 2754,
+						label: '惠农区'
+					},
+					{
+						value: 2755,
+						label: '平罗县'
+					}
+				]
+			},
+			{
+				value: 322,
+				label: '吴忠',
+				children: [{
+						value: 2756,
+						label: '利通区'
+					},
+					{
+						value: 2757,
+						label: '盐池县'
+					},
+					{
+						value: 2758,
+						label: '同心县'
+					},
+					{
+						value: 2759,
+						label: '青铜峡'
+					}
+				]
+			},
+			{
+				value: 323,
+				label: '固原',
+				children: [{
+						value: 2760,
+						label: '原州区'
+					},
+					{
+						value: 2761,
+						label: '西吉县'
+					},
+					{
+						value: 2762,
+						label: '隆德县'
+					},
+					{
+						value: 2763,
+						label: '泾源县'
+					},
+					{
+						value: 2764,
+						label: '彭阳县'
+					}
+				]
+			},
+			{
+				value: 324,
+				label: '中卫',
+				children: [{
+						value: 2765,
+						label: '沙坡头区'
+					},
+					{
+						value: 2766,
+						label: '中宁县'
+					},
+					{
+						value: 2767,
+						label: '海原县'
+					}
+				]
+			}
+		]
+	},
+	{
+		value: 31,
+		label: '新疆',
+		children: [{
+				value: 325,
+				label: '乌鲁木齐',
+				children: [{
+						value: 2768,
+						label: '天山区'
+					},
+					{
+						value: 2769,
+						label: '沙依巴克区'
+					},
+					{
+						value: 2770,
+						label: '新区'
+					},
+					{
+						value: 2771,
+						label: '水磨沟区'
+					},
+					{
+						value: 2772,
+						label: '头屯河区'
+					},
+					{
+						value: 2773,
+						label: '达坂城区'
+					},
+					{
+						value: 2774,
+						label: '东山区'
+					},
+					{
+						value: 2775,
+						label: '乌鲁木齐县'
+					}
+				]
+			},
+			{
+				value: 326,
+				label: '克拉玛依',
+				children: [{
+						value: 2776,
+						label: '独山子区'
+					},
+					{
+						value: 2777,
+						label: '克拉玛依区'
+					},
+					{
+						value: 2778,
+						label: '白碱滩区'
+					},
+					{
+						value: 2779,
+						label: '乌尔禾区'
+					}
+				]
+			},
+			{
+				value: 327,
+				label: '吐鲁番地区',
+				children: [{
+						value: 2780,
+						label: '吐鲁番'
+					},
+					{
+						value: 2781,
+						label: '鄯善县'
+					},
+					{
+						value: 2782,
+						label: '托克逊县'
+					}
+				]
+			},
+			{
+				value: 328,
+				label: '哈密地区',
+				children: [{
+						value: 2783,
+						label: '哈密'
+					},
+					{
+						value: 2784,
+						label: '巴里坤哈萨克自治县'
+					},
+					{
+						value: 2785,
+						label: '伊吾县'
+					}
+				]
+			},
+			{
+				value: 329,
+				label: '昌吉',
+				children: [{
+						value: 2786,
+						label: '昌吉'
+					},
+					{
+						value: 2787,
+						label: '阜康'
+					},
+					{
+						value: 2788,
+						label: '米泉'
+					},
+					{
+						value: 2789,
+						label: '呼图壁县'
+					},
+					{
+						value: 2790,
+						label: '玛纳斯县'
+					},
+					{
+						value: 2791,
+						label: '奇台县'
+					},
+					{
+						value: 2792,
+						label: '吉木萨尔县'
+					},
+					{
+						value: 2793,
+						label: '木垒哈萨克自治县'
+					}
+				]
+			},
+			{
+				value: 330,
+				label: '博尔塔拉',
+				children: [{
+						value: 2794,
+						label: '博乐'
+					},
+					{
+						value: 2795,
+						label: '精河县'
+					},
+					{
+						value: 2796,
+						label: '温泉县'
+					}
+				]
+			},
+			{
+				value: 331,
+				label: '巴音郭楞',
+				children: [{
+						value: 2797,
+						label: '库尔勒'
+					},
+					{
+						value: 2798,
+						label: '轮台县'
+					},
+					{
+						value: 2799,
+						label: '尉犁县'
+					},
+					{
+						value: 2800,
+						label: '若羌县'
+					},
+					{
+						value: 2801,
+						label: '且末县'
+					},
+					{
+						value: 2802,
+						label: '焉耆回族自治县'
+					},
+					{
+						value: 2803,
+						label: '和静县'
+					},
+					{
+						value: 2804,
+						label: '和硕县'
+					},
+					{
+						value: 2805,
+						label: '博湖县'
+					}
+				]
+			},
+			{
+				value: 332,
+				label: '阿克苏地区',
+				children: [{
+						value: 2806,
+						label: '阿克苏'
+					},
+					{
+						value: 2807,
+						label: '温宿县'
+					},
+					{
+						value: 2808,
+						label: '库车县'
+					},
+					{
+						value: 2809,
+						label: '沙雅县'
+					},
+					{
+						value: 2810,
+						label: '新和县'
+					},
+					{
+						value: 2811,
+						label: '拜城县'
+					},
+					{
+						value: 2812,
+						label: '乌什县'
+					},
+					{
+						value: 2813,
+						label: '阿瓦提县'
+					},
+					{
+						value: 2814,
+						label: '柯坪县'
+					}
+				]
+			},
+			{
+				value: 333,
+				label: '克孜勒苏柯尔克孜',
+				children: [{
+						value: 2815,
+						label: '阿图什'
+					},
+					{
+						value: 2816,
+						label: '阿克陶县'
+					},
+					{
+						value: 2817,
+						label: '阿合奇县'
+					},
+					{
+						value: 2818,
+						label: '乌恰县'
+					}
+				]
+			},
+			{
+				value: 334,
+				label: '喀什地区',
+				children: [{
+						value: 2819,
+						label: '喀什'
+					},
+					{
+						value: 2820,
+						label: '疏附县'
+					},
+					{
+						value: 2821,
+						label: '疏勒县'
+					},
+					{
+						value: 2822,
+						label: '英吉沙县'
+					},
+					{
+						value: 2823,
+						label: '泽普县'
+					},
+					{
+						value: 2824,
+						label: '莎车县'
+					},
+					{
+						value: 2825,
+						label: '叶城县'
+					},
+					{
+						value: 2826,
+						label: '麦盖提县'
+					},
+					{
+						value: 2827,
+						label: '岳普湖县'
+					},
+					{
+						value: 2828,
+						label: '伽师县'
+					},
+					{
+						value: 2829,
+						label: '巴楚县'
+					},
+					{
+						value: 2830,
+						label: '塔什库尔干塔吉克自治县'
+					}
+				]
+			},
+			{
+				value: 335,
+				label: '和田地区',
+				children: [{
+						value: 2831,
+						label: '和田'
+					},
+					{
+						value: 2832,
+						label: '和田县'
+					},
+					{
+						value: 2833,
+						label: '墨玉县'
+					},
+					{
+						value: 2834,
+						label: '皮山县'
+					},
+					{
+						value: 2835,
+						label: '洛浦县'
+					},
+					{
+						value: 2836,
+						label: '策勒县'
+					},
+					{
+						value: 2837,
+						label: '于田县'
+					},
+					{
+						value: 2838,
+						label: '民丰县'
+					}
+				]
+			},
+			{
+				value: 336,
+				label: '伊犁哈萨克',
+				children: [{
+						value: 2839,
+						label: '伊宁'
+					},
+					{
+						value: 2840,
+						label: '奎屯'
+					},
+					{
+						value: 2841,
+						label: '伊宁县'
+					},
+					{
+						value: 2842,
+						label: '察布查尔锡伯自治县'
+					},
+					{
+						value: 2843,
+						label: '霍城县'
+					},
+					{
+						value: 2844,
+						label: '巩留县'
+					},
+					{
+						value: 2845,
+						label: '新源县'
+					},
+					{
+						value: 2846,
+						label: '昭苏县'
+					},
+					{
+						value: 2847,
+						label: '特克斯县'
+					},
+					{
+						value: 2848,
+						label: '尼勒克县'
+					}
+				]
+			},
+			{
+				value: 337,
+				label: '塔城地区',
+				children: [{
+						value: 2849,
+						label: '塔城'
+					},
+					{
+						value: 2850,
+						label: '乌苏'
+					},
+					{
+						value: 2851,
+						label: '额敏县'
+					},
+					{
+						value: 2852,
+						label: '沙湾县'
+					},
+					{
+						value: 2853,
+						label: '托里县'
+					},
+					{
+						value: 2854,
+						label: '裕民县'
+					},
+					{
+						value: 2855,
+						label: '和布克赛尔蒙古自治县'
+					}
+				]
+			},
+			{
+				value: 338,
+				label: '阿勒泰地区',
+				children: [{
+						value: 2856,
+						label: '阿勒泰'
+					},
+					{
+						value: 2857,
+						label: '布尔津县'
+					},
+					{
+						value: 2858,
+						label: '富蕴县'
+					},
+					{
+						value: 2859,
+						label: '福海县'
+					},
+					{
+						value: 2860,
+						label: '哈巴河县'
+					},
+					{
+						value: 2861,
+						label: '青河县'
+					},
+					{
+						value: 2862,
+						label: '吉木乃县'
+					}
+				]
+			},
+			{
+				value: 339,
+				label: '石河子',
+				children: []
+			},
+			{
+				value: 340,
+				label: '阿拉尔',
+				children: []
+			},
+			{
+				value: 341,
+				label: '图木舒克',
+				children: []
+			},
+			{
+				value: 342,
+				label: '五家渠',
+				children: []
+			}
+		]
+	},
+	{
+		value: 32,
+		label: '香港'
+	},
+	{
+		value: 33,
+		label: '澳门'
+	},
+	{
+		value: 34,
+		label: '台湾'
+	}
+]

+ 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 => {
+				console.log(obj, '123456');
+				return {
+					name: obj.label
+				};
+			});
+			this.array[1] = AllAddress[this.value[0]].children.map(obj => {
+				return {
+					name: obj.label
+				};
+			});
+			if (AllAddress[this.value[0]].children[this.value[1]].children) {
+				this.array[2] = AllAddress[this.value[0]].children[this.value[1]].children.map(obj => {
+					return {
+						name: obj.label
+					};
+				});
+			}
+
+			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 = '../../static/xuan-popup/success.png';
+					list.typeClass='mpopup-success';
+					return list;
+				}
+				if (list.type == 'warn') {
+					list.icon = '../../static/xuan-popup/warn.png';
+					list.typeClass='mpopup-warn';
+					return list;
+				}
+				if (list.type == 'info') {
+					list.icon = '../../static/xuan-popup/info.png';
+					list.typeClass='mpopup-info';
+					return list;
+				}
+				if (list.type == 'err') {
+					list.icon = '../../static/xuan-popup/err.png';
+					list.typeClass='mpopup-err';
+					return list;
+				}
+				if (list.type == 'loading') {
+					list.icon = '../../static/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>

+ 34 - 0
interceptor.js

@@ -0,0 +1,34 @@
+// 应用打开后拦截
+const loadRouter = function() {
+	// 获取上个页面
+	let pages = getCurrentPages();
+	let prePage = pages[pages.length - 2];
+	// #ifdef H5
+	let page =  prePage;
+	// #endif
+	// #ifdef APP-PLUS
+	let page = prePage.$vm;
+	// #endif
+	interceptor(page,prePage)
+}
+// 路由拦截
+/**
+ * @param {Object} now 当前页面
+ * @param {Object} before 上一个页面
+ */
+const interceptor = function(now,before) {
+	// 获取用户信息判断是否登录过
+	let userInfo = uni.getStorageSync('userInfo') || '';
+	// 判断是否需要拦截
+	let state = uni.getStorageSync('loginInterceptor');
+	// 判断是否需要拦截
+	if (state) {
+		// 拦截条件
+		if (!userInfo.id) {
+			uni.navigateTo({
+				url: '/pages/public/login'
+			})
+		}
+	}
+}
+export default loadRouter

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

+ 185 - 0
manifest.json

@@ -0,0 +1,185 @@
+{
+    "name" : "满园春艾灸堂",
+    "appid" : "__UNI__6B60931",
+    "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" : {
+            "OAuth" : {},
+            "Share" : {},
+            "Payment" : {},
+            "Geolocation" : {},
+            "Maps" : {}
+        },
+        /* 模块配置 */
+        "distribute" : {
+            /* 应用发布信息 */
+            "android" : {
+                /* android打包配置 */
+                "permissions" : [
+                    "<uses-permission android:name=\"android.permission.ACCESS_COARSE_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.CALL_PHONE\"/>",
+                    "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.INTERNET\"/>",
+                    "<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>",
+                    "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.VIBRATE\"/>",
+                    "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
+                    "<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>"
+                ],
+                "abiFilters" : [ "armeabi-v7a", "arm64-v8a", "x86" ],
+                "autoSdkPermissions" : true
+            },
+            "ios" : {
+                "idfa" : false,
+                "capabilities" : {
+                    "entitlements" : {
+                        "com.apple.developer.associated-domains" : [ "applinks:yrh.liuniu946.com" ]
+                    }
+                }
+            },
+            /* ios打包配置 */
+            "sdkConfigs" : {
+                "maps" : {},
+                "oauth" : {
+                    "weixin" : {
+                        "appid" : "wx3ff7aa4ad9ada474",
+                        "appsecret" : "05b46c28ed0efe79de119a559b4de1c3",
+                        "UniversalLinks" : "https://yrh.liuniu946.com/links/"
+                    }
+                },
+                "payment" : {
+                    "weixin" : {
+                        "appid" : "wx3ff7aa4ad9ada474",
+                        "UniversalLinks" : "https://yrh.liuniu946.com/links/"
+                    },
+                    "alipay" : {
+                        "__platform__" : [ "ios", "android" ]
+                    }
+                },
+                "share" : {
+                    "weixin" : {
+                        "appid" : "wx3ff7aa4ad9ada474",
+                        "UniversalLinks" : "https://yrh.liuniu946.com/links/"
+                    }
+                },
+                "ad" : {},
+                "geolocation" : {},
+                "speech" : {},
+                "push" : {}
+            },
+            "icons" : {
+                "android" : {
+                    "hdpi" : "unpackage/res/icons/72x72.png",
+                    "xhdpi" : "unpackage/res/icons/96x96.png",
+                    "xxhdpi" : "unpackage/res/icons/144x144.png",
+                    "xxxhdpi" : "unpackage/res/icons/192x192.png"
+                },
+                "ios" : {
+                    "appstore" : "unpackage/res/icons/1024x1024.png",
+                    "ipad" : {
+                        "app" : "unpackage/res/icons/76x76.png",
+                        "app@2x" : "unpackage/res/icons/152x152.png",
+                        "notification" : "unpackage/res/icons/20x20.png",
+                        "notification@2x" : "unpackage/res/icons/40x40.png",
+                        "proapp@2x" : "unpackage/res/icons/167x167.png",
+                        "settings" : "unpackage/res/icons/29x29.png",
+                        "settings@2x" : "unpackage/res/icons/58x58.png",
+                        "spotlight" : "unpackage/res/icons/40x40.png",
+                        "spotlight@2x" : "unpackage/res/icons/80x80.png"
+                    },
+                    "iphone" : {
+                        "app@2x" : "unpackage/res/icons/120x120.png",
+                        "app@3x" : "unpackage/res/icons/180x180.png",
+                        "notification@2x" : "unpackage/res/icons/40x40.png",
+                        "notification@3x" : "unpackage/res/icons/60x60.png",
+                        "settings@2x" : "unpackage/res/icons/58x58.png",
+                        "settings@3x" : "unpackage/res/icons/87x87.png",
+                        "spotlight@2x" : "unpackage/res/icons/80x80.png",
+                        "spotlight@3x" : "unpackage/res/icons/120x120.png"
+                    }
+                }
+            },
+            "splashscreen" : {
+                "android" : {
+                    "hdpi" : "unpackage/res/app图/启动图/480x762.png",
+                    "xhdpi" : "unpackage/res/app图/启动图/720x1242.png",
+                    "xxhdpi" : "unpackage/res/app图/启动图/1080x1882.png"
+                },
+                "ios" : {
+                    "iphone" : {
+                        "portrait-896h@3x" : "D:/app项目文件/满园春/app图/启动图/1242x2688.png",
+                        "portrait-896h@2x" : "D:/app项目文件/满园春/app图/启动图/828x1792.png",
+                        "iphonex" : "D:/app项目文件/满园春/app图/启动图/1125x2436.png",
+                        "retina55" : "D:/app项目文件/满园春/app图/启动图/1242x2208.png",
+                        "retina47" : "D:/app项目文件/满园春/app图/启动图/750x1334.png",
+                        "retina40" : "D:/app项目文件/满园春/app图/启动图/640x1136.png"
+                    },
+                    "storyboard" : "unpackage/res/CustomStoryboard.zip"
+                },
+                "iosStyle" : "storyboard",
+                "androidStyle" : "default"
+            }
+        }
+    },
+    /* SDK配置 */
+    "quickapp" : {},
+    /* 快应用特有相关 */
+    "mp-weixin" : {
+        /* 小程序特有相关 */
+        "usingComponents" : true,
+        "appid" : "wx8d1ae97627bf06f9",
+        "setting" : {
+            "urlCheck" : true
+        }
+    },
+    "h5" : {
+        "title" : "满园春艾灸堂",
+        "domain" : "",
+        "router" : {
+            "base" : "/index/",
+            "mode" : "hash"
+        },
+        "devServer" : {
+            "proxy" : {
+                "/api" : {
+                    // "target" : "http://m.manyuanchunjia.com/api", //请求的目标域名
+                    "target" : "8du.manyuanchunjia.com", //请求的目标域名
+
+                    // "target" : "http://myc.frp.liuniu946.com/api", //请求的目标域名
+                    "changeOrigin" : true,
+                    // "secure": false,
+                    "pathRewrite" : {}
+                }
+            },
+            "https" : false
+        },
+        "optimization" : {
+            "treeShaking" : {
+                "enable" : true
+            }
+        },
+        "sdkConfigs" : {
+            "maps" : {
+                "qqmap" : {
+                    "key" : "VYZBZ-P2TRG-RMIQ3-ITAIN-2DKBK-CKFQQ"
+                }
+            }
+        }
+    }
+}

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

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

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


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

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

+ 11 - 0
package-lock.json

@@ -0,0 +1,11 @@
+{
+  "requires": true,
+  "lockfileVersion": 1,
+  "dependencies": {
+    "jweixin-module": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/jweixin-module/-/jweixin-module-1.4.1.tgz",
+      "integrity": "sha512-2R2oa1lYhAsclfjKSf3DP4ZiP1dcrQUbM7aklbeJA+UAg/LS7MqoA6UbTy1cs4sbB34z62K4bKW0Z9iazD8ejg=="
+    }
+  }
+}

+ 945 - 0
pages.json

@@ -0,0 +1,945 @@
+{
+	"easycom": {
+		"^u-(.*)": "@/uview-ui/components/u-$1/u-$1.vue"
+	},
+	"pages": [{
+			"path": "pages/index/index",
+			"style": {
+				"navigationBarTitleText": "满园春艾灸堂",
+				"app-plus": {
+					"titleNView": false
+				}
+			}
+		},
+		{
+			"path": "pages/gift/gift",
+			"style": {
+				"navigationBarTitleText": "礼包"
+
+			}
+
+		},
+		{
+			"path": "pages/public/register",
+			"style": {
+				"navigationBarTitleText": "注册",
+				"app-plus": {
+					"titleNView": {
+						"type": "transparent"
+					}
+				}
+			}
+		},
+
+		{
+			"path": "pages/moments/details",
+			"style": {
+				"navigationBarTitleText": "文章页",
+				"app-plus": {
+					"titleNView": false
+				}
+			}
+		},
+		{
+			"path": "pages/public/login",
+			"style": {
+				"navigationBarTitleText": "登录",
+				"app-plus": {
+					"titleNView": {
+						"type": "transparent"
+					}
+				}
+			}
+		},
+		{
+			"path": "pages/public/wxLogin",
+			"style": {
+				"navigationBarTitleText": "微信登录",
+				"app-plus": {
+					"titleNView": {
+						"type": "transparent"
+					}
+				}
+			}
+		},
+		{
+			"path": "pages/public/forget",
+			"style": {
+				"navigationBarTitleText": "忘记密码",
+				"app-plus": {
+					"titleNView": {
+						"type": "transparent"
+					}
+				}
+			}
+		}, {
+			"path": "pages/product/classify",
+			"style": {
+				"navigationBarTitleText": "套餐商品",
+				"app-plus": {
+					"titleNView": {
+						"type": "transparent"
+					}
+				}
+			}
+		},
+		// {
+		// 	"path": "pages/product/giftBag",
+		// 	"style": {
+		// 		"navigationBarTitleText": "联盟礼包"
+		// 	}
+		// },
+
+		{
+			"path": "pages/product/supermarket",
+			"style": {
+				"navigationBarTitleText": "超市"
+			}
+		},
+		{
+			"path": "pages/myteam/myteam",
+			"style": {
+				"navigationBarTitleText": "我的团队",
+				"app-plus": {
+					"titleNView": false
+				}
+			}
+		},
+		{
+			"path": "pages/myteam/myteamQian",
+			"style": {
+				"navigationBarTitleText": "百业团队",
+				"app-plus": {
+					"titleNView": false
+				}
+			}
+		},
+		{
+			"path": "pages/merchant/merchant",
+			"style": {
+				"navigationBarTextStyle": "white",
+				"navigationBarBackgroundColor": "#75E5B6",
+				"navigationBarTitleText": "商家中心",
+				"app-plus": {
+					"titleNView": {
+						//隐藏title
+						// "type": "transparent"
+
+					}
+				}
+			}
+		},
+		{
+			"path": "pages/merchant/order",
+			"style": {
+				"navigationBarTitleText": "订单管理",
+				"navigationBarBackgroundColor": "#52C696",
+				"navigationBarTextStyle": "white"
+			}
+		},
+		{
+			"path": "pages/merchant/becomeShop",
+			"style": {
+				"navigationBarTitleText": "商家入驻",
+				"navigationBarBackgroundColor": "#52C696",
+				"navigationBarTextStyle": "white"
+			}
+		},
+		{
+			"path": "pages/product/product",
+			"style": {
+				"navigationBarTitleText": "详情展示",
+				"app-plus": {
+					"titleNView": {
+						"type": "transparent"
+					}
+				}
+			}
+		}, {
+			"path": "pages/product/search",
+			"style": {
+				"enablePullDownRefresh": true,
+				// #ifdef MP
+				"navigationStyle": "custom",
+				// #endif
+				//#ifdef H5
+				"navigationStyle": "default",
+				//#endif
+				// #ifndef MP
+				"app-plus": {
+					"titleNView": {
+						"searchInput": {
+							"backgroundColor": "rgba(231, 231, 231,.7)",
+							"borderRadius": "16px",
+							"placeholder": "请输入关键字",
+							"disabled": false,
+							"placeholderColor": "#606266",
+							"align": "left"
+						},
+						"buttons": [{
+							"text": "搜索",
+							"fontSize": "14",
+							"color": "#303133",
+							"background": "rgba(0,0,0,0)",
+							"width": "40px"
+						}]
+					}
+				},
+				// #endif
+				"navigationBarTitleText": "搜索"
+			}
+		},
+		{
+			"path": "pages/set/about",
+			"style": {
+				"navigationBarTitleText": "关于我们"
+			}
+		},
+		{
+			"path": "pages/set/phone",
+			"style": {
+				"navigationBarTitleText": "绑定手机号"
+			}
+		},
+		{
+			"path": "pages/product/reply",
+			"style": {
+				"navigationBarTitleText": "评论"
+			}
+		}, {
+			"path": "pages/order/evaluate",
+			"style": {
+				"navigationBarTitleText": "评论"
+			}
+		},
+		{
+			"path": "pages/userinfo/userinfo",
+			"style": {
+				"navigationBarTitleText": "修改资料"
+			}
+		}, {
+			"path": "pages/cart/cart",
+			"style": {
+				"navigationBarTitleText": "购物车"
+			}
+		},
+		 {
+			"path": "pages/cart/cart2",
+			"style": {
+				"navigationBarTitleText": "购物车"
+			}
+		}, {
+			"path": "pages/cart/cart4",
+			"style": {
+				"navigationBarTitleText": "购物车"
+			}
+		}, {
+			"path": "pages/cart/cart5",
+			"style": {
+				"navigationBarTitleText": "购物车"
+			}
+		}, {
+			"path": "pages/user/user",
+			"style": {
+				// #ifndef MP-WEIXIN
+				"navigationStyle": "custom",
+				"app-plus": {
+					"bounce": "none",
+					"titleNView": false
+					// {
+					//         "type": "transparent",
+					//         "buttons": [{
+					//                         "fontSrc": "/static/yticon.ttf",
+					//                         "text": "\ue60f",
+					//                         "fontSize": "24",
+					//                         "color": "#303133",
+					//                         "width": "46px",
+					//                         "background": "rgba(0,0,0,0)"
+					//                 },
+					//                 {
+					//                         "fontSrc": "/static/yticon.ttf",
+					//                         "text": "\ue744",
+					//                         "fontSize": "28",
+					//                         "color": "#303133",
+					//                         "background": "rgba(0,0,0,0)",
+					//                         "redDot": true
+					//                 }
+					//         ]
+					// }
+				},
+				// #endif
+				"navigationBarTitleText": "个人中心"
+			}
+		}, {
+			"path": "pages/detail/detail",
+			"style": {
+				"navigationBarTitleText": "",
+				"app-plus": {
+					"titleNView": {
+						"type": "transparent"
+					}
+				}
+			}
+		}, {
+			"path": "pages/order/order",
+			"style": {
+				"navigationBarTitleText": "我的订单",
+				"app-plus": {
+					"bounce": "none"
+				}
+			}
+		}, {
+			"path": "pages/order/refundOrder",
+			"style": {
+				"navigationBarTitleText": "退款订单",
+				"app-plus": {
+					"bounce": "none"
+				}
+			}
+		}, {
+			"path": "pages/order/orderDetail",
+			"style": {
+				"navigationBarTitleText": "订单详情",
+				"app-plus": {
+					"bounce": "none"
+				}
+			}
+		},
+		{
+			"path": "pages/merchant/orderDetail",
+			"style": {
+				"navigationBarTitleText": "订单详情",
+				"app-plus": {
+					"bounce": "none"
+				}
+			}
+		}, {
+			"path": "pages/order/orderRefund",
+			"style": {
+				"navigationBarTitleText": "申请退款"
+			}
+		}, {
+			"path": "pages/order/createOrder",
+			"style": {
+				"navigationBarTitleText": "创建订单"
+			}
+		}, {
+			"path": "pages/address/address",
+			"style": {
+				"navigationBarTitleText": "收货地址"
+			}
+		}, 
+		{
+			"path": "pages/address/shopList",
+			"style": {
+				"navigationBarTitleText": "门店列表",
+				"app-plus": {
+					"titleNView": {
+						"searchInput": {
+							"backgroundColor": "rgba(231, 231, 231,.7)",
+							"borderRadius": "16px",
+							"placeholder": "请输入关键字",
+							"placeholderColor": "#606266",
+							"align": "left"
+						},
+						"buttons": [{
+							"text": "搜索",
+							"fontSize": "14",
+							"color": "#303133",
+							"background": "rgba(0,0,0,0)",
+							"width": "40px"
+						}]
+					}
+				}
+			}
+		}, {
+			"path": "pages/address/addressManage",
+			"style": {
+				"navigationBarTitleText": "新增修改地址"
+			}
+		}, {
+			"path": "pages/money/pay",
+			"style": {
+				"navigationBarTitleText": "支付"
+			}
+		},
+		{
+			"path": "pages/money/paySuccess",
+			"style": {
+				"navigationBarTitleText": "支付成功"
+			}
+		}, {
+			"path": "pages/award/award",
+			"style": {
+				"navigationBarTitleText": "我的绿积分",
+				"app-plus": {
+					"titleNView": false
+				}
+			}
+		}, {
+			"path": "pages/award/withdrawal",
+			"style": {
+				"navigationBarTitleText": "奖励兑换"
+			}
+		}, {
+			"path": "pages/scoreAccumulate/scoreAccumulate",
+			"style": {
+				"navigationBarTitleText": "我的积分",
+				"app-plus": {
+					"titleNView": false
+				}
+			}
+		}, {
+			"path": "pages/notice/notice",
+			"style": {
+				"navigationBarTitleText": "通知"
+			}
+		}, {
+			"path": "pages/category/category",
+			"style": {
+				"navigationBarTitleText": "分类",
+				//#ifdef H5
+				"navigationStyle": "default",
+				//#endif
+				"app-plus": {
+					"bounce": "none",
+					"titleNView": {
+						"searchInput": {
+							"backgroundColor": "rgba(231, 231, 231,.7)",
+							"borderRadius": "16px",
+							"placeholder": "商品搜索",
+							"disabled": true,
+							"placeholderColor": "#606266",
+							"align": "left"
+						}
+					}
+				}
+			}
+		}, {
+			"path": "pages/product/list",
+			"style": {
+				"navigationBarTitleText": "商品列表"
+			}
+		},
+		{
+			"path": "pages/product/listSearch",
+			"style": {
+				"enablePullDownRefresh": true,
+				// #ifdef MP
+				"navigationStyle": "custom",
+				// #endif
+				//#ifdef H5
+				"navigationStyle": "default",
+				//#endif
+				// #ifndef MP
+				"app-plus": {
+					"titleNView": {
+						"searchInput": {
+							"backgroundColor": "rgba(231, 231, 231,.7)",
+							"borderRadius": "16px",
+							"placeholder": "请输入关键字",
+							"disabled": false,
+							"placeholderColor": "#606266",
+							"align": "left"
+						},
+						"buttons": [{
+							"text": "搜索",
+							"fontSize": "14",
+							"color": "#303133",
+							"background": "rgba(0,0,0,0)",
+							"width": "40px"
+						}]
+					}
+				},
+				// #endif
+				"navigationBarTitleText": "商品列表"
+			}
+		},
+		{
+			"path": "pages/shareQrCode/index",
+			"style": {
+				"navigationBarTitleText": "邀请好友",
+				"app-plus": {
+					"titleNView": {
+						"type": "transparent"
+					}
+				}
+			}
+		},
+		{
+			"path": "pages/recommend/recommend",
+			"style": {
+				"navigationBarTitleText": "我的推荐人",
+				"app-plus": {
+					"titleNView": false
+				},
+				"enablePullDownRefresh": false
+			}
+
+		},
+		{
+			"path": "pages/wallet/wallet",
+			"style": {
+				"navigationBarTitleText": "我的余额",
+				"app-plus": {
+					"titleNView": false
+				}
+			}
+		},
+		{
+			"path": "pages/wallet/freezeList",
+			"style": {
+				"navigationBarTitleText": "冻结记录"
+			}
+		},
+		{
+			"path": "pages/wallet/account",
+			"style": {
+				"navigationBarTitleText": "兑换账号"
+			}
+		},
+		{
+			"path": "pages/wallet/withdrawal",
+			"style": {
+				"navigationBarTitleText": "余额兑换"
+			}
+		},
+		{
+			"path": "pages/wallet/recharge",
+			"style": {
+				"navigationBarTitleText": "充值"
+			}
+		},
+		{
+			"path": "pages/favorites/favorites",
+			"style": {
+				"navigationBarTitleText": "收藏夹"
+			}
+		}, {
+			"path": "pages/sign/index",
+			"style": {
+				"navigationBarTitleText": "每日签到",
+				"app-plus": {
+					"titleNView": {
+						"type": "transparent"
+					}
+				}
+			}
+		},
+		{
+			"path": "pages/sign/prize",
+			"style": {
+				"navigationBarTitleText": "抽奖"
+			}
+		},
+		{
+			"path": "pages/sign/info",
+			"style": {
+				"navigationBarTitleText": "抽奖记录"
+			}
+		},
+		{
+			"path": "pages/redirect/redirect",
+			"style": {
+				"navigationBarTitleText": "微信登录跳转页面",
+				"app-plus": {
+					"titleNView": false
+				}
+			}
+		},
+		{
+			"path": "pages/prefecture/integral",
+			"style": {
+				"navigationBarTitleText": "积分兑换"
+			}
+		},
+
+		{
+			"path": "pages/shareQrCode/wechatQr",
+			"style": {
+				"navigationBarTitleText": "关注公众号"
+			}
+		},
+		{
+			"path": "pages/seckill/seckill",
+			"style": {
+				"navigationBarTitleText": "限时抢购"
+			}
+		},
+		// {
+		// 	"path": "pages/groupBooking/index",
+		// 	"style": {
+		// 		"enablePullDownRefresh": true,
+		// 		"navigationBarTitleText": "超值拼团"
+		// 	}
+		// },
+		// {
+		// 	"path": "pages/groupBooking/detail",
+		// 	"style": {
+		// 		"navigationBarTitleText": "拼团详细",
+		// 		"app-plus": {
+		// 			"titleNView": false
+		// 		}
+		// 	}
+		// },
+		// {
+		// 	"path": "pages/groupBooking/inviteImg",
+		// 	"style": {
+		// 		"navigationBarTitleText": "拼团邀请图",
+		// 		"app-plus": {
+		// 			"titleNView": false
+		// 		}
+		// 	}
+		// }, 
+		{
+			"path": "pages/award/withdmoenys",
+			"style": {
+				"navigationBarTitleText": "转余额"
+			}
+		},
+		// {
+		// 	"path": "pages/coupon/details",
+		// 	"style": {
+		// 		"navigationBarTitleText": "付款",
+		// 		"app-plus": {
+		// 			"titleNView":{
+		// 				"backgroundColor": "#5DBC7C",
+		// 				"titleColor":"#FFFFFF"
+		// 			}
+		// 		},
+		// 		"h5":{
+		// 			"titleNView":{
+		// 				"backgroundColor": "#5DBC7C",
+		// 				"titleColor":"#FFFFFF"
+		// 			}
+		// 		}
+		// 	}
+		// },
+		{
+			"path": "pages/received/index",
+			"style": {
+				"navigationBarTitleText": "收付款",
+				"app-plus": {
+					"titleNView": {
+						"backgroundColor": "#5DBC7C",
+						"titleColor": "#FFFFFF"
+					}
+				},
+				"h5": {
+					"titleNView": {
+						"backgroundColor": "#5DBC7C",
+						"titleColor": "#FFFFFF"
+					}
+				}
+			}
+		},
+		{
+			"path": "pages/received/ipad",
+			"style": {
+				"navigationBarTitleText": "收款",
+				"app-plus": {
+					"titleNView": {
+						"backgroundColor": "#5DBC7C",
+						"titleColor": "#FFFFFF"
+					}
+				},
+				"h5": {
+					"titleNView": {
+						"backgroundColor": "#5DBC7C",
+						"titleColor": "#FFFFFF"
+					}
+				}
+			}
+		},
+		{
+			"path": "pages/received/list",
+			"style": {
+				"navigationBarTitleText": "收付款记录",
+				"app-plus": {
+					"titleNView": {
+						"backgroundColor": "#5DBC7C",
+						"titleColor": "#FFFFFF"
+					}
+				},
+				"h5": {
+					"titleNView": {
+						"backgroundColor": "#5DBC7C",
+						"titleColor": "#FFFFFF"
+					}
+				}
+			}
+		},
+		// {
+		// 	"path": "pages/received/paySuccess",
+		// 	"style": {
+		// 		"navigationBarTitleText": "付款成功",
+		// 		"app-plus": {
+		// 			"titleNView":{
+		// 				"backgroundColor": "#5DBC7C",
+		// 				"titleColor":"#FFFFFF"
+		// 			}
+		// 		},
+		// 		"h5":{
+		// 			"titleNView":{
+		// 				"backgroundColor": "#5DBC7C",
+		// 				"titleColor":"#FFFFFF"
+		// 			}
+		// 		}
+		// 	}
+		// },
+		{
+			"path": "pages/coupon/consumer",
+			"style": {
+				"navigationBarTitleText": "我的消费券",
+				"app-plus": {
+					"titleNView": false
+				}
+			}
+		},
+		{
+			"path": "pages/shoping/index",
+			"style": {
+				"navigationBarTitleText": "店铺信息",
+				"app-plus": {
+					"titleNView": false
+				}
+			}
+		},
+		{
+			"path": "pages/shoping/list",
+			"style": {
+				"navigationBarTitleText": "合作门店"
+
+			}
+		},
+		{
+			"path": "pages/shoping/shopService",
+			"style": {
+				"navigationBarTitleText": "店铺"
+
+			}
+		},
+		{
+			"path": "pages/shoping/shopDetail",
+			"style": {
+				"navigationBarTitleText": "养发馆"
+
+			}
+		},
+		{
+			"path": "pages/shoping/booked",
+			"style": {
+				"navigationBarTitleText": "到店时间"
+
+			}
+		},
+		{
+			"path": "pages/contract/agreement",
+			"style": {
+				"navigationBarTitleText": "注册协议"
+			}
+		},
+		{
+			"path": "pages/contract/privacy",
+			"style": {
+				"navigationBarTitleText": "隐私政策"
+			}
+		},
+		{
+			"path": "pages/contract/start",
+			"style": {
+				"navigationBarTitleText": "授权页",
+				"app-plus": {
+					"titleNView": false
+				}
+			}
+		}
+
+		, {
+			"path": "pages/merchant/commodity",
+			"style": {
+				"navigationBarTitleText": "商品管理"
+				// ,"app-plus": {
+				// 	"titleNView": false
+				// }
+			}
+
+		}, {
+			"path": "pages/merchant/vipDetail",
+			"style": {
+				"navigationBarBackgroundColor": "#72E3B4",
+				"navigationBarTextStyle": "white",
+				"navigationBarTitleText": "店铺会员",
+				"enablePullDownRefresh": false
+			}
+
+		},
+		{
+			"path": "pages/merchant/withdrawal",
+			"style": {
+				"navigationBarBackgroundColor": "#72E3B4",
+				"navigationBarTextStyle": "white",
+				"navigationBarTitleText": "店铺兑换",
+				"enablePullDownRefresh": false
+			}
+
+		},
+		{
+			"path": "pages/merchant/storeQr",
+			"style": {
+				"navigationBarBackgroundColor": "#72E3B4",
+				"navigationBarTextStyle": "white",
+				"navigationBarTitleText": "店铺二维码",
+				"enablePullDownRefresh": false
+			}
+		},
+		{
+			"path": "pages/merchant/finance",
+			"style": {
+				"navigationBarBackgroundColor": "#ffffff",
+				"navigationBarTextStyle": "black",
+				"navigationBarTitleText": "店铺财务",
+				"enablePullDownRefresh": false
+			}
+		},
+		{
+			"path": "pages/merchant/newfinance",
+			"style": {
+				"navigationBarBackgroundColor": "#ffffff",
+				"navigationBarTextStyle": "black",
+				"navigationBarTitleText": "店铺数据"
+			}
+		},
+		{
+			"path": "pages/merchant/onlineOrder",
+			"style": {
+				"navigationBarBackgroundColor": "#ffffff",
+				"navigationBarTextStyle": "black",
+				"navigationBarTitleText": "在线下单",
+				"enablePullDownRefresh": false
+			}
+		},
+		{
+			"path": "pages/wallet/openMember",
+			"style": {
+				"navigationBarBackgroundColor": "#363533",
+				"navigationBarTextStyle": "white",
+				"navigationBarTitleText": "开通会员",
+				"enablePullDownRefresh": false
+			}
+		}, {
+			"path": "pages/merchant/storeData",
+			"style": {
+				"navigationBarBackgroundColor": "#72E3B4",
+				"navigationBarTextStyle": "white",
+				"navigationBarTitleText": "店铺数据",
+				"enablePullDownRefresh": false
+			}
+		},
+		{
+			"path": "pages/prefecture/detail",
+			"style": {
+				"navigationBarTitleText": "兑换详情",
+				"app-plus": {
+					"titleNView": {
+						"type": "transparent"
+					}
+				}
+			}
+		},
+		{
+			"path": "pages/prefecture/voucher",
+			"style": {
+				"navigationBarTitleText": "消费券兑换"
+			}
+		}
+
+		// ,{
+		//     "path" : "pages/user/shareQrCode/shareQrCode",
+		//     "style" :                                                                                    
+		//     {
+		//         "navigationBarTitleText": "",
+		//         "enablePullDownRefresh": false
+		//     }
+
+		// }
+		, {
+			"path": "pages/invite/invite",
+			"style": {
+				"navigationBarTitleText": "邀请好友",
+				"enablePullDownRefresh": false
+			}
+
+		}
+
+
+		, {
+			"path": "pages/store/store",
+			"style": {
+				"navigationBarTitleText": "合作门店",
+				"enablePullDownRefresh": false
+			}
+
+		}, {
+			"path": "pages/transfer/transfer",
+			"style": {
+				"navigationBarTitleText": "转账",
+				"enablePullDownRefresh": false
+			}
+
+		}, {
+			"path": "pages/Withdrawal/Withdrawal",
+			"style": {
+				"navigationBarTitleText": "提现",
+				"enablePullDownRefresh": false
+			}
+
+		}, {
+			"path": "pages/switch/switch",
+			"style": {
+				"navigationBarTitleText": "切换账号",
+				"enablePullDownRefresh": false
+			}
+		}
+	],
+	"globalStyle": {
+		"navigationBarTextStyle": "black",
+		"navigationBarTitleText": "满园春艾灸堂",
+		"navigationBarBackgroundColor": "#FFFFFF",
+		//#ifdef H5
+		"navigationStyle": "custom",
+		//#endif
+		"backgroundColor": "#f8f8f8"
+	},
+	"tabBar": {
+		"color": "#C0C4CC",
+		"selectedColor": "#5DBC7C",
+		"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/category/category",
+				"iconPath": "static/tabBar/tab-cate.png",
+				"selectedIconPath": "static/tabBar/tab-cate-current.png",
+				"text": "分类"
+			},
+			{
+				"pagePath": "pages/cart/cart",
+				"iconPath": "static/tabBar/tab-cart.png",
+				"selectedIconPath": "static/tabBar/tab-cart-current.png",
+				"text": "购物车"
+			},
+			{
+				"pagePath": "pages/user/user",
+				"iconPath": "static/tabBar/tab-my.png",
+				"selectedIconPath": "static/tabBar/tab-my-current.png",
+				"text": "我的"
+			}
+		]
+	}
+}

+ 500 - 0
pages/Withdrawal/Withdrawal.vue

@@ -0,0 +1,500 @@
+<template>
+	<view class="content">
+		<uni-notice-bar single="true" :text="'手续费:' + sxf + '%'"></uni-notice-bar>
+		<view class="content-money">
+			<view class="flex " style="width: 750rpx;justify-content: space-around;margin-left: 0;">
+				<view class="buttom">
+					<view class="icon">{{ money }}</view>
+					<text class="text">可提现金额</text>
+				</view>
+			</view>
+		</view>
+
+		<view class="row-box">
+			<!-- <view class="title">提现金额</view>
+			<view class="row">
+				<text class="tit">¥</text>
+				<input class="input" type="number" v-model="withdrawal" :placeholder="'最低提现金额' + minPrice + '元'"
+					placeholder-class="placeholder" />
+				<view class="buttom" @click="withdrawal = money">全部提现</view>
+			</view>
+			<uni-notice-bar v-if="withdrawal*1>0" single="true" :text="showDz"></uni-notice-bar> -->
+			<view class="title">申请提现金额</view>
+			<view class="row">
+				<text class="tit">¥</text>
+				<input class="input" type="number" v-model="withdrawal" :placeholder="'最低提现金额' + minPrice + '元'"
+					placeholder-class="placeholder" />
+				<view class="buttom" @click="withdrawal = money" >全部提现</view>
+			</view>
+			<uni-notice-bar v-if="withdrawal*1>0" single="true" :text="showDz"></uni-notice-bar>
+		</view>
+		<view class="list">
+			<radio-group @change="tabRadio">
+				<!-- <label>
+					<view class="box">
+						<view class="icon iconfont iconweixin1"></view>
+						<view class="title-box">
+							<view class="title"><text>提现至微信</text></view>
+						</view>
+						<view class="right"><radio value="weixin" color="#ff2d2d" :checked="type == 'weixin'" /></view>
+					</view>
+				</label> -->
+				<!-- <template v-if="isSh == 0"> -->
+					<!-- <label>
+						<view class="box">
+							<view class="icon iconfont iconzhifubao"></view>
+							<view class="title-box">
+								<view class="title"><text>提现至支付宝</text></view>
+							</view>
+							<view class="right"><radio value="alipay" color="#ff2d2d" :checked="type == 'alipay'" /></view>
+						</view>
+					</label> -->
+					<label>
+						<view class="box">
+							<view class="icon iconfont">
+								<image class="icon-img" src="/static/icon/i8.png" mode="aspectFit"></image>
+							</view>
+							<view class="title-box">
+								<view class="title"><text>提现银行账号</text></view>
+							</view>
+							<view class="right">
+								<radio value="bank" color="#ff2d2d" :checked="type == 'bank'" />
+							</view>
+						</view>
+					</label>
+				<!-- </template> -->
+			</radio-group>
+		</view>
+		<template >
+			<view class="row b-b" v-if="type == 'alipay'">
+				<text class="tit">姓名</text>
+				<input class="input" type="text" v-model="ali_people" placeholder="请输入支付宝姓名"
+					placeholder-class="placeholder" />
+			</view>
+			<view class="row b-b" v-if="type == 'alipay'">
+				<text class="tit">支付宝账号</text>
+				<input class="input" type="text" v-model="alipay_code" placeholder="请输入支付宝账号"
+					placeholder-class="placeholder" />
+			</view>
+			<view class="row b-b" v-if="type == 'bank'">
+				<text class="tit">姓名</text>
+				<input class="input" type="text" v-model="bank_people" placeholder="请输入银行卡姓名"
+					placeholder-class="placeholder" />
+			</view>
+			<view class="row b-b" v-if="type == 'bank'">
+				<text class="tit">银行卡号</text>
+				<input class="input" type="text" v-model="bank_code" placeholder="请输入银行卡号"
+					placeholder-class="placeholder" />
+			</view>
+
+			<view class="row b-b" v-if="type == 'bank'">
+				<text class="tit">手机号</text>
+				<input class="input" type="text" v-model="phone" placeholder="请输入手机号" placeholder-class="placeholder" />
+			</view>
+			<view class="row b-b" v-if="type == 'bank'">
+				<text class="tit">所属银行</text>
+				<input class="input" type="text" v-model="bank_name" placeholder="请输入所属银行"
+					placeholder-class="placeholder" />
+			</view>
+			<view class="row b-b" v-if="type == 'bank'">
+				<text class="tit">所属支行</text>
+				<input class="input" type="text" v-model="subbranch" placeholder="请输入所属支行"
+					placeholder-class="placeholder" />
+			</view>
+		</template>
+
+		<!-- <view class="row b-b" v-if="type == 'bank'">
+			<text class="tit">所属支行</text>
+			<input class="input" type="text" v-model="bank_belonging" placeholder="请输入所属支行"
+				placeholder-class="placeholder" />
+		</view> -->
+		<button class="add-btn up" @click="confirm" style="background: #FF7144 ;">提交申请</button>
+
+	</view>
+</template>
+
+<script>
+	import {
+		getMoneyStyle
+	} from '@/utils/rocessor.js';
+	import {
+		extractCash,
+		extractBank,
+		aliInfo,
+		bankInfo,
+		setBank,
+		getBank
+	} from '@/api/wallet.js';
+	import {
+		orderData,
+		getUserInfo,
+		version
+	} from '@/api/user.js';
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex';
+	import uniNoticeBar from '@/components/uni-notice-bar/uni-notice-bar.vue';
+	export default {
+		filters: {
+			getMoneyStyle
+		},
+		components: {
+			uniNoticeBar
+		},
+		computed: {
+			...mapState('user', ['userInfo', 'orderInfo', 'hasLogin'])
+		},
+		data() {
+			return {
+				sxf: '',
+				ali_people: '',
+				loading: false,
+				phone: '',
+				weixin_no: '',
+				type: 'bank', //提现方式
+				money: '0.00', //可提现金额
+				freeze: '0.0', //冻结金额
+				withdrawal: '', //提现金额
+				minPrice: '', //最少提现金额
+				weixin: {},
+				alipay_code: '',
+				alipay_name: '',
+				bank_code: '',
+				bank_people: '',
+				bank_name: '',
+				subbranch: '',
+				bank_belonging: '',
+				jftype: 0,
+				isSh: 1
+			};
+		},
+		onLoad(options) {
+			//加载提现信息
+			this.loadData();
+		},
+		computed: {
+			showDz() {
+				if (this.withdrawal == 0) {
+					return '实际到账0';
+				} else {
+					return '实际到账' + (this.withdrawal * (100 - this.sxf * 1) / 100).toFixed(2) + '';
+				}
+			},
+		},
+		methods: {
+			...mapMutations('user', ['setUserInfo', 'setOrderInfo']),
+			async loadData() {
+				extractBank({}).then(({
+					data
+				}) => {
+					console.log(data, 'data+++++++++');
+					this.sxf = data.extract_commission;
+					this.minPrice = data.minPrice;
+					this.money = data.brokerage_price;
+					if (data.extractInfo != null) {
+						this.bank_people = data.extractInfo.real_name;
+						this.bank_name = data.extractInfo.bank_address;
+						this.subbranch = data.extractInfo.subbranch;
+						this.bank_code = data.extractInfo.bank_code;
+						this.phone = data.extractInfo.phone || this.userInfo.phone || '';
+						// this.phone = this.userInfo.phone;
+					}
+				});
+				version({}).then(({
+					data
+				}) => {
+					this.isSh = data.status;
+					console.log(data, '123456');
+				});
+			},
+			// 跳转
+			navTo(url) {
+				uni.navigateTo({
+					url: url
+				});
+			},
+			// 切换选中对象
+			tabRadio(e) {
+				this.type = e.detail.value;
+			},
+			// 提交
+			confirm() {
+				let obj = this;
+				if (obj.loading) {
+					return;
+				}
+				let data = {
+					extract_type: this.type, //bank -银行卡 alipay-支付宝 weixin-微信
+					money: this.withdrawal, //金额
+					type: 0 //0佣金1余额
+				};
+				if (this.withdrawal < this.minPrice) {
+					uni.showToast({
+						title: '提现金额不可少于' + this.minPrice,
+						duration: 2000,
+						mask: false,
+						icon: 'none'
+					});
+					return;
+				}
+				if (obj.type == 'alipay') {
+					if (obj.ali_people == '') {
+						return obj.$api.msg('请输入姓名');
+					}
+					if (obj.alipay_code == '') {
+						return obj.$api.msg('请输入支付宝账号');
+					}
+					data.name = obj.ali_people;
+					data.alipay_code = obj.alipay_code;
+				}
+				// if (this.type == 'alipay') {
+				// 	console.log('alipay');
+				// 	data.name = this.aliData.name;
+				// 	data.alipay_code = this.aliData.payment;
+				// }
+				if (obj.type == 'bank') {
+					if (obj.bank_people == '') {
+						return obj.$api.msg('请输入姓名');
+					}
+					if (obj.phone == '') {
+						return obj.$api.msg('请输入手机号码');
+					}
+					if (obj.bank_name == '') {
+						return obj.$api.msg('请输入所属银行');
+					}
+					if (obj.subbranch == '') {
+						return obj.$api.msg('请输入所属支行');
+					}
+					if (obj.bank_code == '') {
+						return obj.$api.msg('请输入银行卡号');
+					}
+					data.name = obj.bank_people;
+					data.phone = obj.phone;
+					data.bankname = obj.bank_name;
+					data.cardnum = obj.bank_code;
+					data.subbranch = obj.subbranch;
+				}
+				// if (this.type == 'bank') {
+				// 	console.log('bank');
+				// 	data.name = this.bankData.name;
+				// 	data.bankname = this.bankData.bank;
+				// 	data.cardnum = this.bankData.payment;
+				// 	// data.bank_belonging = this.bankData.bank_name
+				// }
+				if (this.type == 'weixin') {
+					console.log('weixin');
+					data.weixin = '123456';
+				}
+				obj.loading = true;
+				extractCash(data)
+					.then(e => {
+						obj.loadData();
+						obj.withdrawal = '';
+						obj.loading = false;
+						uni.showToast({
+							title: '提交成功',
+							duration: 2000,
+							position: 'top'
+						});
+					})
+					.catch(e => {
+						obj.loading = false;
+					});
+			}
+		}
+	};
+</script>
+
+<style lang="scss">
+	page {
+		height: 100%;
+	}
+
+	.content-money {
+		padding: 30rpx 0;
+		background: #ffffff;
+	}
+
+	.flex {
+		background-color: #ffffff;
+		text-align: center;
+		margin: 0 30rpx;
+		border-radius: $border-radius-sm;
+
+		.buttom {
+			font-size: $font-lg;
+			width: 50%;
+			
+		}
+
+		.interval {
+			width: 2px;
+			height: 60rpx;
+			background-color: #eeeeee;
+		}
+
+		.icon {
+			background-size: 100%;
+			font-size: 42rpx;
+			color: $font-color-dark;
+			font-weight: bold;
+			background-repeat: no-repeat;
+			background-position: center;
+		}
+
+		.text {
+			color: $font-color-light;
+		}
+	}
+
+	.row-box {
+		margin-top: 30rpx;
+		padding: 20rpx 30rpx;
+		background: #fff;
+
+		.title {
+			font-size: $font-base + 2rpx;
+			color: $font-color-dark;
+		}
+
+		.row {
+			display: flex;
+			align-items: center;
+			position: relative;
+			height: 80rpx;
+
+			.tit {
+				flex-shrink: 0;
+				width: 40rpx;
+				font-size: 30rpx;
+				color: $font-color-dark;
+			}
+
+			.input {
+				flex: 1;
+				font-size: 30rpx;
+				color: $font-color-dark;
+			}
+
+			.iconlocation {
+				font-size: 36rpx;
+				color: $font-color-light;
+			}
+
+			.buttom {
+				color: $base-color;
+				font-size: $font-base;
+			}
+		}
+	}
+
+	.add-btn {
+		&.modified {
+			// color: #ffffff;
+			border: 1px solid #ff4072;
+			// background-color: #fff;
+			color: #ff4072;
+		}
+
+		&.up {
+			background: $base-color;
+			color: #fff;
+		}
+
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		width: 690rpx;
+		height: 80rpx;
+		margin: 0 auto;
+		margin-top: 30rpx;
+		font-size: $font-lg;
+		border-radius: 10rpx;
+		// box-shadow: 1px 2px 5px rgba(219, 63, 96, 0.4);
+	}
+
+	.list {
+		padding-left: 30rpx;
+		margin-top: 30rpx;
+		background-color: #ffffff;
+
+		.box {
+			display: flex;
+			align-items: center;
+			width: 100%;
+			height: 120rpx;
+			border-bottom: 1px solid $border-color-light;
+
+			.icon {
+				font-size: 48rpx;
+				padding-right: 20rpx;
+
+				.icon-img {
+					height: 50rpx;
+					width: 50rpx;
+				}
+			}
+
+			.iconweixin1 {
+				color: #18bf16;
+			}
+
+			.iconzhifubao {
+				color: #08aaec;
+			}
+
+			.title-box {
+				flex-grow: 1;
+				text-align: left;
+
+				.title {
+					font-size: $font-base + 2rpx;
+					color: $font-color-base;
+				}
+
+				.node {
+					font-size: $font-sm;
+					color: $font-color-light;
+				}
+			}
+		}
+	}
+
+	/deep/ .uni-radio-input {
+		width: 45rpx;
+		height: 45rpx;
+	}
+
+	.row {
+		display: flex;
+		align-items: center;
+		position: relative;
+		padding: 0 30upx;
+		height: 110upx;
+		background: #fff;
+
+		.tit {
+			flex-shrink: 0;
+			width: 250upx;
+			font-size: 30upx;
+			color: $font-color-dark;
+		}
+
+		.input {
+			flex: 1;
+			font-size: 30upx;
+			color: $font-color-dark;
+		}
+
+		.iconlocation {
+			font-size: 36upx;
+			color: $font-color-light;
+		}
+	}
+
+	.tip {
+		padding: 20rpx;
+		color: #fd3b39;
+	}
+</style>

+ 220 - 0
pages/address/address.vue

@@ -0,0 +1,220 @@
+<template>
+	<view class="content b-t">
+		<view class="list" v-for="(item, index) in addressList" :key="index" @click="checkAddress(item)">
+			<view class="wrapper">
+				<view class="address-box">
+					<text class="name">{{ item.real_name }}</text>
+					<text class="mobile">{{ item.phone }}</text>
+				</view>
+				<view class="u-box">
+					<text class="address">{{ item.province + item.city + item.district }} {{ item.detail }}</text>
+				</view>
+			</view>
+			<view class="buttom">
+				<view class="default-buttom" @click.stop="defaultUp(item,index)">
+					<view class="iconfont iconroundcheckfill checkbox" :class="{ checked: item.is_default == 1 }"></view>
+					<text class="text">设为默认地址</text>
+				</view>
+				<view class="operation">
+					<view @click.stop="addAddress('edit', item)">
+						<text class="iconfont iconedit"></text>
+						<text class="text">编辑</text>
+					</view>
+					<view class="blank"></view>
+					<view @click.stop="delAddress(item)">
+						<text class="iconfont icondelete"></text>
+						<text class="text">删除</text>
+					</view>
+				</view>
+			</view>
+		</view>
+		<button class="add-btn" @click="addAddress('add')">新增地址</button>
+	</view>
+</template>
+
+<script>
+import { getAddressList, addressEdit,addressDel } from '@/api/address.js';
+export default {
+	data() {
+		return {
+			source: 0,
+			addressList: []
+		};
+	},
+	onLoad(option) {
+		this.source = option.source||0
+		this.loadAddress();
+	},
+	methods: {
+		// 加载地址
+		loadAddress() {
+			getAddressList({
+				page: 1,
+				limit: 100
+			}).then(({ data }) => {
+				this.addressList = data;
+			});
+		},
+		// 设为默认地址
+		defaultUp(data,ind) {
+			this.addressList=this.addressList.map((e) => {
+				e.is_default=0
+				return e
+			})
+			this.addressList[ind].is_default=1
+			addressEdit({
+				type: 1,
+				longitude: data.longitude,
+				latitude: data.latitude,
+				real_name: data.real_name,
+				phone: data.phone,
+				address: {
+					province: data.province,
+					city: data.city,
+					district: data.district
+				},
+				detail: data.detail,
+				is_default: 1,
+				id: data.id,
+				type: 1,
+			}).then(({ data }) => {
+				this.loadAddress();
+			}).catch((e) => {
+				console.log(e);
+			});
+		},
+		//删除地址
+		delAddress(item) {
+			addressDel({
+				id:item.id
+			}).then(({data})=>{
+				this.$api.msg('删除成功')
+			})
+			let s = this.addressList.indexOf(item);
+			this.addressList.splice(s, 1);
+		},
+		//选择地址
+		checkAddress(item) {
+			if (this.source == 1) {
+				//this.$api.prePage()获取上一页实例,在App.vue定义
+				this.$api.prePage().addressData = item;
+				uni.navigateBack();
+			}
+		},
+		// 添加地址
+		addAddress(type, item) {
+			uni.navigateTo({
+				url: `/pages/address/addressManage?type=${type}&data=${JSON.stringify(item)}`
+			});
+		},
+		//添加或修改成功之后回调
+		refreshList() {
+			// 重新加载地址
+			this.loadAddress()
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+page {
+	padding-bottom: 120rpx;
+	padding-top: 20rpx;
+}
+.content {
+	position: relative;
+}
+.list {
+	align-items: center;
+	padding: 20rpx 30rpx;
+	background: #fff;
+	margin: 20rpx;
+	margin-top: 0;
+	.buttom {
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		padding-top: 10rpx;
+		.checkbox {
+			font-size: 44rpx;
+			line-height: 1;
+			padding: 4rpx;
+			color: $font-color-disabled;
+			background: #fff;
+			border-radius: 50px;
+		}
+		.checkbox.checked {
+			color: $base-color;
+		}
+		.default-buttom {
+			display: flex;
+			align-items: center;
+		}
+		.operation {
+			display: flex;
+			align-items: center;
+			.blank {
+				width: 30rpx;
+			}
+		}
+		.text {
+			padding-left: 10rpx;
+			font-size: 24rpx;
+			color: #666666;
+		}
+	}
+}
+.wrapper {
+	display: flex;
+	flex-direction: column;
+	flex: 1;
+	border-bottom: 1px solid #f0f0f0;
+	padding-bottom: 20rpx;
+}
+.address-box {
+	display: flex;
+	align-items: center;
+	justify-content: space-between;
+	.address {
+		font-size: $font-base + 2rpx;
+		color: $font-color-dark;
+	}
+	.mobile {
+		font-size: $font-base;
+		color: rgba(51, 51, 51, 1);
+	}
+}
+.u-box {
+	font-size: $font-base;
+	color: $font-color-light;
+	margin-top: 16rpx;
+	.name {
+		margin-right: 30rpx;
+	}
+}
+.icon-bianji {
+	display: flex;
+	align-items: center;
+	height: 80rpx;
+	font-size: 40rpx;
+	color: $font-color-light;
+	padding-left: 30rpx;
+}
+
+.add-btn {
+	position: fixed;
+	left: 30rpx;
+	right: 30rpx;
+	bottom: 16rpx;
+	z-index: 95;
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	width: 690rpx;
+	height: 80rpx;
+	font-size: $font-lg;
+	color: #fff;
+	background-color: $base-color;
+	border-radius: 10rpx;
+}
+</style>

+ 327 - 0
pages/address/addressManage.vue

@@ -0,0 +1,327 @@
+<template>
+	<view class="content">
+		<view class="row b-b">
+			<text class="tit">联系人</text>
+			<input class="input" type="text" v-model="addressData.name" placeholder="收货人姓名" placeholder-class="placeholder" />
+		</view>
+		<view class="row b-b">
+			<text class="tit">手机号</text>
+			<input class="input" type="number" v-model="addressData.mobile" placeholder="收货人手机号码" placeholder-class="placeholder" />
+		</view>
+		<view class="row b-b">
+			<text class="tit">地址</text>
+			<!-- <picker mode="multiSelector" :range="arrDate" @change="cityChange">
+				<view>{{ addressDetail || '请选择地址(点击选择地址)' }}</view>
+			</picker> -->
+			<pickerAddress class="input" @change="onCityClick">{{ addressDetail || '请选择地址(点击选择地址)' }}</pickerAddress>
+		</view>
+		<!-- <view class="row b-b" @click="clickMap">
+			<text class="tit">定位</text>
+			<input class="input" type="text" v-model="addressLocation.name" disabled="disabled" placeholder="请在列表选择要定位的地址" placeholder-class="placeholder" />
+			<text class="iconfont iconlocation"></text>
+		</view> -->
+		<view class="row b-b">
+			<text class="tit">门牌号</text>
+			<input class="input" type="text" v-model="addressData.area" placeholder="请填写精确地址方便快速送到" placeholder-class="placeholder" />
+		</view>
+
+		<uni-list class="margin-t-20">
+			<uni-list-item
+				title="设为默认"
+				:switch-checked="addressData.default"
+				:show-switch="true"
+				:show-arrow="false"
+				switch-color="#5dbc7c"
+				@switchChange="switchChange"
+			></uni-list-item>
+		</uni-list>
+
+		<button class="add-btn" @click="confirm">提交</button>
+	</view>
+</template>
+
+<script>
+import uniList from '@/components/uni-list/uni-list.vue';
+import uniListItem from '@/components/uni-list-item/uni-list-item.vue';
+import uniPopup from '@/components/uni-popup/uni-popup.vue';
+import pickerAddress from '@/components/wangding-pickerAddress/wangding-pickerAddress.vue';
+import { addressEdit } from '@/api/address.js';
+import { openMap } from '@/utils/rocessor.js';
+export default {
+	components: {
+		uniList,
+		uniListItem,
+		pickerAddress,
+		uniPopup
+	},
+	data() {
+		return {
+			addressDetail: '',
+			addressData: {
+				name: '',
+				mobile: '',
+				address: {
+					province: '',
+					city: '',
+					district: ''
+				},
+				area: '',
+				default: false
+			},
+			// 定位地址
+			addressLocation: {
+				name: '',
+				address: '',
+				errMsg: 'chooseLocation:ok',
+				latitude: '',
+				longitude: '',
+				name: '',
+				// 判断是否地址选择页进入
+				isIndex: false
+			},
+			arrDate: [['浙江省'], ['台州市'], ['椒江区', '黄岩区', '路桥区', '温岭市', '临海市', '玉环县']]
+		};
+	},
+	onLoad(option) {
+		let title = '新增收货地址';
+		// #ifdef MP
+		// 获取地图权限
+		uni.authorize({
+			scope: 'scope.userLocation',
+			success: res => {}
+		});
+		// #endif
+		if (option.isIndex == 3) {
+			this.isIndex = true;
+		}
+		if (option.type === 'edit') {
+			title = '编辑收货地址';
+			let data = JSON.parse(option.data);
+			console.log(data);
+			let arr = data.detail.split(',');
+			let len = arr.length - 1;
+			this.addressLocation.name = arr[0];
+			this.addressLocation.latitude = data.latitude;
+			this.addressLocation.longitude = data.longitude;
+			this.addressData = {
+				name: data.real_name,
+				mobile: data.phone,
+				address: {
+					province: data.province,
+					city: data.city,
+					district: data.district
+				},
+				area: data.detail.split(',')[len],
+				default: data.is_default == 1,
+				id: data.id
+			};
+			this.addressDetail = data.province + data.city + data.district;
+		}
+		this.manageType = option.type;
+		uni.setNavigationBarTitle({
+			title
+		});
+	},
+	methods: {
+		// 选中经纬度
+		clickMap() {
+			uni.showLoading({
+				title: '加载中'
+			});
+			let obj = this;
+			// #ifndef APP-PLUS
+			uni.chooseLocation({
+				type: 'gcj02',
+				success: function(res) {
+					obj.addressLocation.name = res.name;
+					console.log('位置名称:' + res.name);
+					console.log('详细地址:' + res.address);
+					console.log('纬度:' + res.latitude);
+					console.log('经度:' + res.longitude);
+					obj.addressLocation.latitude = res.latitude;
+					obj.addressLocation.longitude = res.longitude;
+				}
+			});
+			// #endif
+			// #ifdef APP-PLUS
+			uni.hideLoading();
+			uni.getLocation({
+				type: 'gcj02',
+				success(e) {
+					uni.chooseLocation({
+						latitude: e.latitude,
+						longitude: e.longitude,
+						success(e) {
+							obj.addressLocation = e;
+							console.log(e, '123456');
+						},
+						fail(e) {
+							uni.showModal({
+								title: '地址选择错误',
+								content: JSON.parse(e)
+							});
+							console.log(e);
+						}
+					});
+				},
+				fail(e) {
+					uni.showModal({
+						title: '定位错误',
+						content: JSON.parse(e)
+					});
+				}
+			});
+			// uni.chooseLocation()
+			// #endif
+		},
+		// 选中城市切换
+		onCityClick({ data }) {
+			let address = this.addressData.address;
+			address.province = data[0];
+			address.city = data[1];
+			address.district = data[2];
+			this.addressDetail = data.join(',');
+		},
+
+		// 选择地址
+		cityChange: function(e) {
+			console.log(e);
+			let address = this.addressData.address;
+			let type1 = e.detail.value[0];
+			let type2 = e.detail.value[1];
+			let type3 = e.detail.value[2];
+			address.province = this.arrDate[0][type1];
+			console.log(address.province);
+			address.city = this.arrDate[1][type2];
+			console.log(address.city);
+			address.district = this.arrDate[2][type3];
+			console.log(address.district);
+			this.addressDetail = address.province + ' ' + address.city + ' ' + address.district;
+		},
+
+		// 设置是否为默认地址
+		switchChange(e) {
+			this.addressData.default = e.value;
+		},
+		//提交
+		confirm() {
+			let obj = this;
+			let data = this.addressData;
+			if (!data.name) {
+				this.$api.msg('请填写收货人姓名');
+				return;
+			}
+			if (!/(^1[2|3|4|5|6|7|8|9][0-9]{9}$)/.test(data.mobile)) {
+				this.$api.msg('请输入正确的手机号码');
+				return;
+			}
+			if (!data.address) {
+				this.$api.msg('请在地图选择所在位置');
+				return;
+			}
+			if (!data.area) {
+				this.$api.msg('请填写门牌号信息');
+				return;
+			}
+			if (data.area.length < 4) {
+				this.$api.msg('请填写具体信息精确到门牌号');
+				return;
+			}
+			// if (obj.addressLocation.longitude == '') {
+			// 	this.$api.msg('请选择正确的定位地址');
+			// 	return;
+			// }
+			// if (obj.addressLocation.latitude == '') {
+			// 	this.$api.msg('请选择正确的定位地址');
+			// 	return;
+			// }
+			//this.$api.prePage()获取上一页实例,可直接调用上页所有数据和方法,在App.vue定义
+			addressEdit({
+				type: 1,
+				real_name: data.name,
+				phone: data.mobile,
+				address: {
+					province: data.address.province,
+					city: data.address.city,
+					district: data.address.district
+				},
+				detail: obj.addressLocation.name + ',' + data.area,
+				is_default: data.default,
+				id: data.id || '',
+				longitude: obj.addressLocation.longitude,
+				latitude: obj.addressLocation.latitude
+			}).then(function(e) {
+				uni.showToast({
+					title: '提交成功',
+					duration: 2000,
+					icon: 'none'
+				});
+				setTimeout(function() {
+					console.log('返回');
+					uni.navigateBack();
+				}, 800);
+
+				obj.$api.prePage().refreshList();
+			});
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+page {
+	background: $page-color-base;
+	padding-top: 16rpx;
+}
+
+.row {
+	display: flex;
+	align-items: center;
+	position: relative;
+	padding: 0 30rpx;
+	height: 110rpx;
+	background: #fff;
+
+	.tit {
+		flex-shrink: 0;
+		width: 120rpx;
+		font-size: 30rpx;
+		color: $font-color-dark;
+	}
+	.input {
+		flex: 1;
+		font-size: 30rpx;
+		color: $font-color-dark;
+	}
+	.iconlocation {
+		font-size: 36rpx;
+		color: $font-color-light;
+	}
+}
+.default-row {
+	margin-top: 16rpx;
+	.tit {
+		flex: 1;
+	}
+	switch {
+		transform: translateX(16rpx) scale(0.9);
+	}
+}
+.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);
+}
+
+.alert-box {
+	background-color: #ffffff;
+}
+</style>

+ 173 - 0
pages/address/shopList.vue

@@ -0,0 +1,173 @@
+<template>
+	<view class="content b-t">
+		<view class="list" v-for="(item, index) in addressList" :key="index" @click="checkAddress(item)">
+			<view class="wrapper">
+				<view class="address-box">
+					<text class="name">{{ item.name }}</text>
+					<text class="mobile">{{ item.phone }}</text>
+				</view>
+				<view class="u-box">
+					<view class="address">{{ item.address }}</view>
+					<view class="address">{{ item.detailed_address }}</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+import { getAddressList } from '@/api/address.js';
+export default {
+	data() {
+		return {
+			source: 0,
+			addressList: [], //显示的地址数据
+			value: '', //保存查询值
+			addressListAll: [] //保存地址数据
+		};
+	},
+	// #ifdef APP-PLUS || H5
+	onNavigationBarButtonTap(e) {
+		if (e.text === '搜索') {
+			this.searchAddressList();
+		}
+	},
+	// 监听原生标题栏搜索输入框输入内容变化事件
+	onNavigationBarSearchInputChanged(e) {
+		this.value = e.text;
+	},
+	// 监听原生标题栏搜索输入框搜索事件,用户点击软键盘上的“搜索”按钮时触发
+	onNavigationBarSearchInputConfirmed() {
+		this.searchAddressList();
+	},
+	// #endif
+	onLoad(option) {
+		this.addressListAll = this.addressList = this.$api.prePage().system_store;
+		console.log(this.addressListAll);
+	},
+	methods: {
+		// 地址查询功能
+		searchAddressList() {
+			let obj = this;
+			obj.addressList = obj.addressListAll.filter(e => {
+				// 判断客户是否有输入值并且能查询到
+				if (e.name.indexOf(obj.value) >= 0 && obj.value) {
+					return true;
+				} else if (obj.value.length == 0) {
+					return true;
+				}
+			});
+			console.log(obj.addressList);
+		},
+		//选择地址
+		checkAddress(item) {
+			// 设置商品页面地址
+			this.$api.prePage().shopAddress = item;
+			uni.navigateBack();
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+page {
+	padding-bottom: 120rpx;
+	padding-top: 20rpx;
+}
+.content {
+	position: relative;
+}
+.list {
+	align-items: center;
+	padding: 20rpx 30rpx;
+	background: #fff;
+	margin: 20rpx;
+	margin-top: 0;
+	.buttom {
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		padding-top: 10rpx;
+		.checkbox {
+			font-size: 44rpx;
+			line-height: 1;
+			padding: 4rpx;
+			color: $font-color-disabled;
+			background: #fff;
+			border-radius: 50px;
+		}
+		.checkbox.checked {
+			color: $base-color;
+		}
+		.default-buttom {
+			display: flex;
+			align-items: center;
+		}
+		.operation {
+			display: flex;
+			align-items: center;
+			.blank {
+				width: 30rpx;
+			}
+		}
+		.text {
+			padding-left: 10rpx;
+			font-size: 24rpx;
+			color: #666666;
+		}
+	}
+}
+.wrapper {
+	display: flex;
+	flex-direction: column;
+	flex: 1;
+	// border-bottom: 1px solid #f0f0f0;
+	// padding-bottom: 20rpx;
+}
+.address-box {
+	display: flex;
+	align-items: center;
+	justify-content: space-between;
+	.address {
+		font-size: $font-base + 2rpx;
+		color: $font-color-dark;
+	}
+	.mobile {
+		font-size: $font-base;
+		color: rgba(51, 51, 51, 1);
+	}
+}
+.u-box {
+	font-size: $font-base;
+	color: $font-color-light;
+	margin-top: 16rpx;
+	.name {
+		margin-right: 30rpx;
+	}
+}
+.icon-bianji {
+	display: flex;
+	align-items: center;
+	height: 80rpx;
+	font-size: 40rpx;
+	color: $font-color-light;
+	padding-left: 30rpx;
+}
+
+.add-btn {
+	position: fixed;
+	left: 30rpx;
+	right: 30rpx;
+	bottom: 16rpx;
+	z-index: 95;
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	width: 690rpx;
+	height: 80rpx;
+	font-size: $font-lg;
+	color: #fff;
+	background-color: $base-color;
+	border-radius: 10rpx;
+}
+</style>

+ 511 - 0
pages/award/award.vue

@@ -0,0 +1,511 @@
+<template>
+	<view class="content">
+		<view class="content-money">
+			<view class="status_bar"><!-- 这里是状态栏 --></view>
+			<view class="body-title">
+				<view class="goback-box" @click="toBack">
+					<image class="goback" src="../../static/icon/fanhui.png" mode=""></image>
+				</view>
+				<view class="header">固定积分</view>
+			</view>
+			<view class="content-bg">
+				<image src="../../static/yonghu/jf.png" mode=""></image>
+			</view>
+			<view class="money-box">
+				<view class="money">{{ sum || 0 }}</view>
+				<view>固定积分</view>
+			</view>
+			
+		</view>
+		<view class="info-box flex">
+			<view class="info-item">
+				<view class="info-font">获得总量</view>
+				<view class="info-num">{{sum || '0'}}</view>
+			</view>
+			<view class="shu"></view>
+			<view class="info-item">
+				<view class="info-font">已释放</view>
+				<view class="info-num">{{send || '0'}}</view>
+			</view>
+		</view>
+	     <!-- 积分列表 -->
+		 <view class="body" v-for="item in list" :key="item.id">
+		 		<text class="left">总量{{sum}}/已释放{{send|| 0}}</text>
+				<text class="right">{{item.add_time}}</text>
+		 </view>
+	</view>
+</template>
+
+<script>
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex';
+	import {
+		getCommissionInfo,
+		getUserInfo,
+		gdjf
+	} from '@/api/user.js';
+	import {
+		getMoneyStyle
+	} from '@/utils/rocessor.js';
+	import {
+		mapGetters
+	} from 'vuex';
+	import uniLoadMore from '@/components/uni-load-more/uni-load-more.vue';
+	import empty from '@/components/empty';
+	import {
+		spreadCommission,
+		userBalance,
+		extractBank
+	} from '@/api/wallet.js';
+	export default {
+		filters: {
+			getMoneyStyle
+		},
+		components: {
+			empty,
+			uniLoadMore
+		},
+		onReady(res) {
+			var _this = this;
+			uni.getSystemInfo({
+				success: resu => {
+					const query = uni.createSelectorQuery();
+					query.select('.swiper-box').boundingClientRect();
+					query.exec(function(res) {
+						_this.height = resu.windowHeight - res[0].top + 'px';
+						console.log('打印页面的剩余高度', _this.height);
+					});
+				},
+				fail: res => {}
+			});
+		},
+		data() {
+			return {
+				list:[],
+				sum: '',
+				send:'',
+				userInfo: {},
+				yj: '',
+				height: '',
+				// 头部图高度
+				maxheight: '',
+				tabCurrentIndex: 0,
+				orderStatusSum: 0,
+				recharge: 0,
+				navList: [
+					{
+						state: 4,
+						text: '支出',
+						loadingType: 'more',
+						orderList: [],
+						page: 1, //当前页数
+						limit: 10 //每次信息条数
+					},
+					{
+						state: 3,
+						text: '收入',
+						loadingType: 'more',
+						orderList: [],
+						page: 1, //当前页数
+						limit: 10 //每次信息条数
+					}
+				],
+				money: ''
+			};
+		},
+		onLoad(options) {
+			this.gdjf()
+		},
+		onShow() {
+			this.extractBank()
+			this.getUserInfo()  
+			this.loadData();
+		},
+		methods: {
+			// 固定积分获取记录
+			async gdjf() {
+					 const res = await gdjf()
+					console.log('gdjf',res);
+					this.list = res.data.list;
+					this.send = res.data.send;
+					this.sum = res.data.sum
+					// console.log('11111111', this.list)
+			},
+			// 用户信息
+			getUserInfo() {
+				getUserInfo({}).then(({
+					data
+				}) => {
+					this.userInfo = data
+				});
+			},
+			
+			
+			extractBank() {
+				extractBank().then(res => {
+					// console.log('bank',res)
+					this.yj = res.data.brokerage_price
+				})
+			},
+			toBack() {
+				uni.switchTab({
+					url: '/pages/user/user'
+				});
+			},
+			// 页面跳转
+			navto(e) {
+				uni.navigateTo({
+					url: e
+				});
+			},
+			
+			//获取收入支出信息
+			async loadData(source) {
+				let obj = this;
+				//这里是将订单挂载到tab列表下
+				let index = this.tabCurrentIndex;
+				let navItem = this.navList[index];
+				let state = navItem.state;
+				if (source === 'tabChange' && navItem.loaded === true) {
+					//tab切换只有第一次需要加载数据
+					return;
+				}
+				if (navItem.loadingType === 'loading') {
+					//防止重复加载
+					return;
+				}
+				// 修改当前对象状态为加载中
+				navItem.loadingType = 'loading';
+
+				spreadCommission({
+						page: navItem.page,
+						limit: navItem.limit,
+
+					}, state)
+					.then(({
+						data
+					}) => {
+						if (data.length > 0) {
+							data.forEach(e => {
+
+								navItem.orderList = navItem.orderList.concat(e.list);
+							})
+							console.log(navItem.orderList);
+							navItem.page++;
+						}
+						//判断是否还有数据, 有改为more, 没有改为noMore
+						if (navItem.limit == data.length) {
+							navItem.loadingType = 'more';
+							return;
+						} else {
+							navItem.loadingType = 'noMore';
+						}
+						uni.hideLoading();
+						this.$set(navItem, 'loaded', true);
+					})
+					.catch(e => {
+						console.log(e);
+					});
+			},
+
+			//swiper 切换
+			changeTab(e) {
+				this.tabCurrentIndex = e.target.current;
+				this.loadData('tabChange');
+			},
+			//顶部tab点击
+			tabClick(index) {
+				this.tabCurrentIndex = index;
+			}
+		}
+	};
+</script>
+
+<style lang="scss">
+	page {
+		background: #f1f1f1;
+		height: 100%;
+	}
+
+	.status_bar {
+		height: var(--status-bar-height);
+		width: 100%;
+	}
+
+	.content-money {
+		position: relative;
+		height: 480rpx;
+
+		.content-bg {
+			position: absolute;
+			top: 0;
+			left: 0;
+			right: 0;
+			width: 750rpx;
+			height: 480rpx;
+
+			image {
+				width: 100%;
+				height: 100%;
+			}
+		}
+
+		.body-title {
+			height: 80rpx;
+			text-align: center;
+			font-size: 35rpx;
+			position: relative;
+
+			.header {
+				position: absolute;
+				left: 0;
+				top: 0;
+				width: 100%;
+				font-size: 36rpx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #fffeff;
+				height: 80rpx;
+				font-size: 36rpx;
+				font-weight: 700;
+				z-index: 9;
+				display: flex;
+				justify-content: center;
+				align-items: center;
+			}
+
+			.goback-box {
+				position: absolute;
+				left: 18rpx;
+				top: 0;
+				height: 80rpx;
+				display: flex;
+				align-items: center;
+			}
+
+			.goback {
+				z-index: 100;
+				width: 34rpx;
+				height: 34rpx;
+			}
+		}
+	}
+
+	.info-box {
+		width: 670rpx;
+		height: 186rpx;
+		background: #ffffff;
+		box-shadow: 0px 0px 20rpx 0px rgba(50, 50, 52, 0.06);
+		border-radius: 20rpx;
+		margin: -100rpx auto 0;
+		position: relative;
+		z-index: 2;
+
+		.info-item {
+			width: 50%;
+			display: flex;
+			flex-direction: column;
+			align-items: center;
+			line-height: 1;
+
+			.info-font {
+				font-size: 30rpx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #999999;
+			}
+
+			.info-num {
+				margin-top: 30rpx;
+				font-size: 30rpx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #181818;
+			}
+		}
+
+		.shu {
+			width: 2rpx;
+			height: 74rpx;
+			background: #dcdfe6;
+		}
+	}
+
+	.money-box {
+		position: relative;
+		z-index: 2;
+		/* #ifdef H5 */
+		padding-top: 90rpx;
+		/* #endif */
+		color: #ffffff;
+		text-align: center;
+		/* #ifdef APP-PLUS */
+		height: 200rpx;
+		display: flex;
+		flex-direction: column;
+		justify-content: center;
+		/* #endif */
+		/* #ifdef MP-WEIXIN */
+		padding-top: 40rpx;
+		/* #endif */
+
+		.money {
+			font-size: 72rpx;
+			font-family: PingFang SC;
+			font-weight: bold;
+			color: #ffffff;
+		}
+
+		.text {
+			font-size: 30rpx;
+		}
+	}
+
+	.moneybtn-box {
+		display: flex;
+		justify-content: space-between;
+		position: relative;
+		z-index: 2;
+		color: #ffffff;
+		padding: 0rpx 50rpx;
+		font-size: 30rpx;
+		font-family: PingFang SC;
+		font-weight: bold;
+		color: #ffffff;
+	}
+
+	.navbar {
+		margin-top: 20rpx;
+		display: flex;
+		height: 88rpx;
+		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: #999999;
+			position: relative;
+
+			&.current {
+				color: #000;
+
+				&:after {
+					content: '';
+					position: absolute;
+					left: 50%;
+					bottom: 0;
+					transform: translateX(-50%);
+					width: 44px;
+					height: 0;
+					border-bottom: 2px solid #fe5b38;
+				}
+			}
+		}
+	}
+
+	//列表
+	.swiper-box {
+		.order-item:last-child {
+			margin-bottom: 60rpx;
+		}
+
+		.order-item {
+			padding: 20rpx 30rpx;
+			line-height: 1.5;
+
+			.title-box {
+				.title {
+					font-size: $font-lg;
+					color: $font-color-base;
+				}
+
+				.time {
+					font-size: $font-base;
+					color: $font-color-light;
+				}
+			}
+
+			.money {
+				color: #fd5b23;
+				font-size: $font-lg;
+				text-align: right;
+
+				.status {
+					color: $font-color-light;
+				}
+			}
+		}
+	}
+
+	.list-scroll-content {
+		background: #ffffff;
+		height: 100%;
+	}
+
+	.content {
+		height: 100%;
+
+		.empty-content {
+			background-color: #ffffff;
+		}
+
+	}
+
+	.btn-box {
+		width: 674rpx;
+		height: 88rpx;
+		background: linear-gradient(0deg, #2e58ff, #32c6ff);
+		border-radius: 44rpx;
+		font-size: 36rpx;
+		font-family: PingFang SC;
+		font-weight: 500;
+		color: #ffffff;
+		text-align: center;
+		line-height: 88rpx;
+		position: fixed;
+		bottom: 48rpx;
+		left: 0;
+		right: 0;
+		margin: 0 auto;
+	}
+	
+	.body{
+		margin-top: 25rpx;
+		width: 750rpx;
+		height: 90rpx;
+		background-color: #fff;
+		display: flex;
+		justify-content: space-between;
+		overflow: hidden;
+	}
+	.left {
+		margin-top: 25rpx;
+		margin-left: 27rpx;
+		height: 28rpx;
+		font-size: 30rpx;
+		font-family: PingFang SC;
+		font-weight: 500;
+		color: #333333;
+	}
+	.right{
+		margin-top: 25rpx;
+		margin-right: 80rpx;
+		height: 20rpx;
+		font-size: 26rpx;
+		font-family: PingFang SC;
+		font-weight: 500;
+		color: #AEAEAE;
+	}
+	
+	
+</style>

+ 351 - 0
pages/award/withdmoenys.vue

@@ -0,0 +1,351 @@
+<template>
+	<view class="content">
+		<!-- <uni-notice-bar single="true" text="每月25号到月底可提现上月结算余额"></uni-notice-bar> -->
+		<view class="content-money">
+			<view class="flex ">
+				<view class="buttom">
+					<view class="icon">{{ money | getMoneyStyle }}</view>
+					<text class="text">可兑换绿积分</text>
+				</view>
+				<view class="interval"></view>
+				<view class="buttom">
+					<view class=" icon">{{ freeze | getMoneyStyle }}</view>
+					<text class="text">待审核绿积分</text>
+				</view>
+				<!-- <view class="interval"></view>
+				<view class="buttom">
+					<view class=" icon">{{ userInfo.lock_group_award || 0 }}</view>
+					<text class="text">冻结极差奖</text>
+				</view> -->
+			</view>
+		</view>
+		<view class="row-box">
+			<view class="title">转账金额</view>
+			<view class="row">
+				<text class="tit">¥</text>
+				<input class="input" type="number" v-model="withdrawal" placeholder="转入金额"
+					placeholder-class="placeholder" />
+				<view class="buttom" @click="withdrawal = money">全部转账</view>
+			</view>
+		</view>
+		<!-- #ifndef MP-WEIXIN -->
+		<!--
+		<view class="list">
+			<radio-group @change="tabRadio">
+				 <label>
+					<view class="box">
+						<view class="icon iconfont iconweixin1"></view>
+						<view class="title-box">
+							<view class="title"><text>提现至微信</text></view>
+						</view>
+						<view class="right"><radio value="weixin" color="#5dbc7c" :checked="type == 'weixin'" /></view>
+					</view>
+				</label> 
+				<label>
+					
+					<view class="box">
+						<view class="icon iconfont iconzhifubao"></view>
+						<view class="title-box">
+							<view class="title">
+								<text v-if="aliData.fullname">提现至支付宝</text>
+								<text v-else>请创建支付宝账号</text>
+							</view>
+							<view class="node">
+								<text v-if="aliData.fullname">真实姓名({{ aliData.fullname }})</text>
+							</view>
+						</view>
+						<view class="right"><radio value="alipay" color="#5dbc7c" :checked="type == 'alipay'" /></view>
+					</view>
+				</label>
+				<label>
+					<view class="box">
+						<view class="icon iconfont"><image class="icon-img" src="/static/icon/i8.png" mode="aspectFit"></image></view>
+						<view class="title-box">
+							<view class="title">
+								<text v-if="bankData.bankno">{{ bankData.bank + ' ' + bankData.bankno }}</text>
+								<text v-else>请创建银行账号</text>
+							</view>
+							<view class="node">
+								<text v-if="bankData.fullname">真实姓名({{ bankData.fullname }})</text>
+							</view>
+						</view>
+						<view class="right"><radio value="bank" color="#5dbc7c" :checked="type == 'bank'" /></view>
+					</view>
+				</label>
+			</radio-group>
+		</view>-->
+		<!-- #endif -->
+		<button class="add-btn up" :class="{ action: loding }" @click="!loding ? confirm() : ''">转入</button>
+	</view>
+</template>
+
+<script>
+	import {
+		getMoneyStyle
+	} from '@/utils/rocessor.js';
+	import {
+		extractCashs,
+		extractBank,
+		aliInfo,
+		bankInfo
+	} from '@/api/wallet.js';
+	import uniNoticeBar from '@/components/uni-notice-bar/uni-notice-bar.vue';
+	export default {
+		filters: {
+			getMoneyStyle
+		},
+		components: {
+			uniNoticeBar
+		},
+		data() {
+			return {
+				type: 'bank', //提现方式
+				money: '0.00', //可提现金额
+				freeze: '0.0', //冻结金额
+				withdrawal: '', //提现金额
+				minPrice: '', //最少提现金额
+				aliData: {},
+				bankData: {},
+				// #ifdef H5
+				weichatBsrowser: false,
+				// #endif
+				loding: false
+			};
+		},
+		onLoad(options) {
+			// #ifdef H5
+			this.weichatBsrowser = uni.getStorageSync('weichatBrowser');
+			// #endif
+			//加载提现信息
+			this.loadData();
+			// 加载提款账号信息
+			this.loadAli();
+			this.loadBank();
+		},
+		methods: {
+			// 更新数据
+			dataUp() {
+				this.loadAli();
+				this.loadBank();
+			},
+			//加载数据
+			async loadAli(source) {
+				aliInfo({}).then(e => {
+					this.aliData = e.data;
+				});
+			},
+			// 加载银行卡信息
+			async loadBank() {
+				bankInfo({}).then(e => {
+					this.bankData = e.data;
+				});
+			},
+			// 加载余额信息
+			async loadData() {
+				extractBank({}).then(({
+					data
+				}) => {
+					this.money = data.commissionCount;
+					this.freeze = data.broken_commission;
+				});
+			},
+			// 跳转
+			navTo(url) {
+				uni.navigateTo({
+					url: url
+				});
+			},
+			// 切换选中对象
+			tabRadio(e) {
+				this.type = e.detail.value;
+			},
+			// 提交
+			confirm() {
+				let obj = this;
+				obj.loding = true;
+				let data = {
+					from: 'weixinh5', //
+					price: this.withdrawal, //金额
+					type: 1 //0佣金1余额
+				};
+				extractCashs(data)
+					.then(e => {
+						// 允许按钮点击
+						obj.loding = false;
+						// 初始化提现金额
+						obj.withdrawal = '';
+						uni.showToast({
+							title: '提交成功',
+							duration: 2000,
+							position: 'top'
+						});
+					})
+					.catch(e => {
+						obj.loding = false;
+						console.log();
+					});
+			}
+		}
+	};
+</script>
+
+<style lang="scss">
+	page {
+		height: 100%;
+	}
+
+	.content-money {
+		padding: 30rpx 0;
+		background: #ffffff;
+	}
+
+	.flex {
+		background-color: #ffffff;
+		text-align: center;
+		margin: 0 30rpx;
+		border-radius: $border-radius-sm;
+
+		.buttom {
+			font-size: $font-lg;
+			width: 50%;
+		}
+
+		.interval {
+			width: 2px;
+			height: 60rpx;
+			background-color: #eeeeee;
+		}
+
+		.icon {
+			background-size: 100%;
+			font-size: 42rpx;
+			color: $font-color-dark;
+			font-weight: bold;
+			background-repeat: no-repeat;
+			background-position: center;
+		}
+
+		.text {
+			color: $font-color-light;
+		}
+	}
+
+	.row-box {
+		margin-top: 30rpx;
+		padding: 20rpx 30rpx;
+		background: #fff;
+
+		.title {
+			font-size: $font-base + 2rpx;
+			color: $font-color-dark;
+		}
+
+		.row {
+			display: flex;
+			align-items: center;
+			position: relative;
+			height: 80rpx;
+
+			.tit {
+				flex-shrink: 0;
+				width: 40rpx;
+				font-size: 30rpx;
+				color: $font-color-dark;
+			}
+
+			.input {
+				flex: 1;
+				font-size: 30rpx;
+				color: $font-color-dark;
+			}
+
+			.iconlocation {
+				font-size: 36rpx;
+				color: $font-color-light;
+			}
+
+			.buttom {
+				color: $font-color-spec;
+				font-size: $font-base;
+			}
+		}
+	}
+
+	.add-btn {
+		&.modified {
+			color: $base-color;
+		}
+
+		&.up {
+			background-color: $base-color;
+			color: #fff;
+		}
+
+		&.action {
+			background-color: $color-gray;
+		}
+
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		width: 690rpx;
+		height: 80rpx;
+		margin: 0 auto;
+		margin-top: 30rpx;
+		font-size: $font-lg;
+		border-radius: 10rpx;
+		// box-shadow: 1px 2px 5px rgba(219, 63, 96, 0.4);
+	}
+
+	.list {
+		padding-left: 30rpx;
+		margin-top: 30rpx;
+		background-color: #ffffff;
+
+		.box {
+			display: flex;
+			align-items: center;
+			width: 100%;
+			height: 120rpx;
+			border-bottom: 1px solid $border-color-light;
+
+			.icon {
+				font-size: 48rpx;
+				padding-right: 20rpx;
+
+				.icon-img {
+					height: 50rpx;
+					width: 50rpx;
+				}
+			}
+
+			.iconweixin1 {
+				color: #18bf16;
+			}
+
+			.iconzhifubao {
+				color: #08aaec;
+			}
+
+			.title-box {
+				flex-grow: 1;
+				text-align: left;
+
+				.title {
+					font-size: $font-base + 2rpx;
+					color: $font-color-base;
+				}
+
+				.node {
+					font-size: $font-sm;
+					color: $font-color-light;
+				}
+			}
+		}
+	}
+
+	/deep/ .uni-radio-input {
+		width: 45rpx;
+		height: 45rpx;
+	}
+</style>

+ 501 - 0
pages/award/withdrawal.vue

@@ -0,0 +1,501 @@
+<template>
+	<view class="content">
+		<!-- <uni-notice-bar single="true" text="每月25号到月底可提现上月结算余额"></uni-notice-bar> -->
+		<view class="content-money" v-if="type1 == 'brokerage_price'">
+			<view class="flex ">
+				<view class="buttom">
+					<view class="icon">{{ moneyYong | getMoneyStyle }}</view>
+					<text class="text">可兑换绿积分</text>
+				</view>
+				<view class="interval"></view>
+				<view class="buttom">
+					<view class=" icon">{{ freeze | getMoneyStyle }}</view>
+					<text class="text">待审核绿积分</text>
+				</view>
+				<view class="interval"></view>
+				<view class="buttom">
+					<view class=" icon">{{ userInfo.lock_group_award || 0 }}</view>
+					<text class="text">冻结极差奖</text>
+				</view>
+			</view>
+		</view>
+		<view class="content-money" v-if="type1 != 'brokerage_price'">
+			<view class="flex">
+				<view class="buttom1">
+					<view class="icon">{{ money | getMoneyStyle }}</view>
+					<text class="text">可兑换余额</text>
+				</view>
+			</view>
+		</view>
+		<view class="row-box">
+			<view class="title">兑换金额</view>
+			<view class="row">
+				<text class="tit">¥</text>
+				<input class="input" type="number" v-model="withdrawal" :placeholder="'最低兑换金额' + minPrice + '元'"
+					placeholder-class="placeholder" />
+				<view class="buttom" v-if="type1 != 'brokerage_price'" @click="withdrawal = money">全部兑换</view>
+				<view class="buttom" v-if="type1 == 'brokerage_price'" @click="withdrawal = moneyYong">全部兑换</view>
+			</view>
+		</view>
+		<view class="tip" v-if="withdrawal != 0 && type1 == 'brokerage_price'">
+			实际到账{{ real }}元,手续费{{ sxf }}元,转换为消费券{{ xfq }}元,转换为股份{{ gf }}元,转换为余额{{ yue }}元
+		</view>
+		<view class="tip" v-if="withdrawal != 0 && type1 != 'brokerage_price'">
+			实际到账{{ withdrawal * (0.9).toFixed(2) * 1 }}元,手续费{{ withdrawal * (0.1).toFixed(2) * 1 }}元
+		</view>
+		<!-- <view class="row-box">
+			<view class="title">手续费</view>
+			<view class="row">
+				<text class="tit">¥</text>
+				<view class="placeholder">{{ withdrawal * 0.01*charge }}</view>
+			</view>
+		</view> -->
+		<!-- #ifndef MP-WEIXIN -->
+		<view class="list">
+			<radio-group @change="tabRadio">
+				<label>
+					<view class="box">
+						<view class="icon iconfont iconweixin1"></view>
+						<view class="title-box">
+							<view class="title"><text>兑换至微信</text></view>
+						</view>
+						<view class="right">
+							<radio value="weixin" color="#5dbc7c" :checked="type == 'weixin'" />
+						</view>
+					</view>
+				</label>
+				<label>
+					<view class="box">
+						<view class="icon iconfont iconzhifubao"></view>
+						<view class="title-box">
+							<view class="title">
+								<text v-if="aliData.fullname">兑换至支付宝</text>
+								<text v-else>请创建支付宝账号</text>
+							</view>
+							<view class="node">
+								<text v-if="aliData.fullname">真实姓名({{ aliData.fullname }})</text>
+							</view>
+						</view>
+						<view class="right">
+							<radio value="alipay" color="#5dbc7c" :checked="type == 'alipay'" />
+						</view>
+					</view>
+				</label>
+				<label>
+					<view class="box">
+						<view class="icon iconfont">
+							<image class="icon-img" src="/static/icon/i8.png" mode="aspectFit"></image>
+						</view>
+						<view class="title-box">
+							<view class="title">
+								<text v-if="bankData.bankno">{{ bankData.bank + ' ' + bankData.bankno }}</text>
+								<text v-else>请创建银行账号</text>
+							</view>
+							<view class="node">
+								<text v-if="bankData.fullname">真实姓名({{ bankData.fullname }})</text>
+							</view>
+						</view>
+						<view class="right">
+							<radio value="bank" color="#5dbc7c" :checked="type == 'bank'" />
+						</view>
+					</view>
+				</label>
+			</radio-group>
+		</view>
+
+		<!-- #endif -->
+		<!-- <view class="row b-b" v-if="type == 'weixin'">
+			<text class="tit">输入微信账号</text>
+			<input class="input" type="text" v-model="weixin" placeholder="请输入微信账号" placeholder-class="placeholder" />
+		</view> -->
+		<button class="add-btn up" @click="confirm">提交申请</button>
+		<button class="add-btn modified" @click="navTo('/pages/wallet/account')">账号管理</button>
+	</view>
+</template>
+
+<script>
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex';
+	import {
+		getMoneyStyle
+	} from '@/utils/rocessor.js';
+	import {
+		extractCash,
+		extractBank,
+		aliInfo,
+		bankInfo,
+		userBalance
+	} from '@/api/wallet.js';
+	import uniNoticeBar from '@/components/uni-notice-bar/uni-notice-bar.vue';
+	export default {
+		filters: {
+			getMoneyStyle
+		},
+		components: {
+			uniNoticeBar
+		},
+		data() {
+			return {
+				type1: '',
+				type: '',
+				isTing: false,
+				type: 'alipay', //提现方式
+				money: '0.00', //可提现余额
+				moneyYong: '0.00', //可提现佣金
+				freeze: '0.0', //冻结金额
+				withdrawal: '', //提现金额
+				minPrice: '', //最少提现金额
+				reall: '', //实际到账
+				sxfl: '', //手续费率
+				xfql: '', //消费券率
+				gfl: '', //股份率
+				yuel: '', //余额率
+				aliData: {},
+				bankData: {},
+				weixin: '',
+				charge: 0,
+				// #ifdef H5
+				weichatBsrowser: false
+				// #endif
+			};
+		},
+		onLoad(options) {
+			this.type1 = options.type;
+			// #ifdef H5
+			this.weichatBsrowser = uni.getStorageSync('weichatBrowser');
+			// #endif
+			//加载提现信息
+			this.loadData();
+			// 加载提款账号信息
+			this.loadAli();
+			this.loadBank();
+		},
+		computed: {
+			...mapState('user', ['userInfo', 'orderInfo', 'hasLogin']),
+			real() {
+				return (this.withdrawal * this.reall).toFixed(2) * 1;
+			},
+			sxf() {
+				return (this.withdrawal * this.sxfl).toFixed(2) * 1;
+			},
+			xfq() {
+				return (this.withdrawal * this.xfql).toFixed(2) * 1;
+			},
+			gf() {
+				return (this.withdrawal * this.gfl).toFixed(2) * 1;
+			},
+			yue() {
+				return (this.withdrawal * this.yuel).toFixed(2) * 1;
+			}
+		},
+		methods: {
+			// 更新数据
+			dataUp() {
+				this.loadAli();
+				this.loadBank();
+			},
+			//加载数据
+			async loadAli(source) {
+				aliInfo({}).then(e => {
+					this.aliData = e.data;
+				});
+			},
+			// 加载银行卡信息
+			async loadBank() {
+				bankInfo({}).then(e => {
+					this.bankData = e.data;
+				});
+			},
+			// 加载余额信息
+			async loadData() {
+				extractBank({}).then(({
+					data
+				}) => {
+					this.moneyYong = data.commissionCount;
+					this.minPrice = data.minPrice;
+					this.freeze = data.broken_commission;
+					this.charge = data.cash_out;
+					this.sxfl = (data.commission / 100).toFixed(2) * 1;
+					this.xfql = (data.commission_consumer / 100).toFixed(5) * 1;
+					this.gfl = (data.commission_gf / 100).toFixed(2) * 1;
+					this.yuel = (data.commission_yue / 100).toFixed(2) * 1;
+					this.reall = (1 - this.sxfl - this.xfql - this.gfl - this.yuel).toFixed(2) * 1;
+				});
+				userBalance({}).then(({
+					data
+				}) => {
+					this.money = data.now_money;
+				});
+			},
+			// 跳转
+			navTo(url) {
+				uni.navigateTo({
+					url: url
+				});
+			},
+			// 切换选中对象
+			tabRadio(e) {
+				this.type = e.detail.value;
+			},
+			// 提交
+			confirm() {
+				let obj = this;
+				if (obj.isTing) {
+					console.log('jing');
+					return;
+				}
+				let data;
+				if (obj.type1 == 'brokerage_price') {
+					data = {
+						extract_type: obj.type, //bank -银行卡 alipay-支付宝 weixin-微信
+						money: obj.withdrawal, //金额
+						money_type: 0, //0佣金1余额
+						from: obj.type1
+					};
+				} else {
+					data = {
+						extract_type: obj.type, //bank -银行卡 alipay-支付宝 weixin-微信
+						money: obj.withdrawal, //金额
+						money_type: 1, //0佣金1余额
+						from: obj.type1
+					};
+				}
+				if (+obj.withdrawal < +obj.minPrice) {
+					uni.showToast({
+						title: '兑换金额不可少于' + obj.minPrice,
+						duration: 2000,
+						mask: false,
+						icon: 'none'
+					});
+					return;
+				}
+				if (obj.type == 'alipay') {
+					data.name = obj.aliData.fullname;
+					data.alipay_code = obj.aliData.alino;
+				}
+				if (obj.type == 'weixin') {
+					data.weixin = '123456';
+				}
+				if (obj.type == 'bank') {
+					data.name = obj.bankData.fullname;
+					data.bankname = obj.bankData.bank;
+					data.cardnum = obj.bankData.bankno;
+				}
+
+				obj.isTing = true;
+				extractCash(data)
+					.then(e => {
+						uni.showToast({
+							title: '提交成功',
+							duration: 2000,
+							position: 'top'
+						});
+						obj.isTing = false;
+						// 清空提现金额
+						obj.withdrawal = '';
+					})
+					.catch(e => {
+						obj.isTing = false;
+						console.log();
+					});
+			}
+		}
+	};
+</script>
+
+<style lang="scss">
+	page {
+		height: 100%;
+	}
+
+	.content-money {
+		padding: 30rpx 0;
+		background: #ffffff;
+	}
+
+	.flex {
+		background-color: #ffffff;
+		text-align: center;
+		margin: 0 30rpx;
+		border-radius: $border-radius-sm;
+
+		.buttom {
+			font-size: $font-lg;
+			width: 50%;
+		}
+
+		.buttom1 {
+			font-size: $font-lg;
+			width: 100%;
+		}
+
+		.interval {
+			width: 2px;
+			height: 60rpx;
+			background-color: #eeeeee;
+		}
+
+		.icon {
+			background-size: 100%;
+			font-size: 42rpx;
+			color: $font-color-dark;
+			font-weight: bold;
+			background-repeat: no-repeat;
+			background-position: center;
+		}
+
+		.text {
+			font-size: 30rpx;
+			color: $font-color-light;
+		}
+	}
+
+	.row-box {
+		margin-top: 30rpx;
+		padding: 20rpx 30rpx;
+		background: #fff;
+
+		.title {
+			font-size: $font-base + 2rpx;
+			color: $font-color-dark;
+		}
+
+		.row {
+			display: flex;
+			align-items: center;
+			position: relative;
+			height: 80rpx;
+
+			.tit {
+				flex-shrink: 0;
+				width: 40rpx;
+				font-size: 30rpx;
+				color: $font-color-dark;
+			}
+
+			.input {
+				flex: 1;
+				font-size: 30rpx;
+				color: $font-color-dark;
+			}
+
+			.iconlocation {
+				font-size: 36rpx;
+				color: $font-color-light;
+			}
+
+			.buttom {
+				color: $font-color-spec;
+				font-size: $font-base;
+			}
+		}
+	}
+
+	.tip {
+		padding: 20rpx;
+		color: #e51c23;
+	}
+
+	.add-btn {
+		&.modified {
+			color: $base-color;
+		}
+
+		&.up {
+			background-color: $base-color;
+			color: #fff;
+		}
+
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		width: 690rpx;
+		height: 80rpx;
+		margin: 0 auto;
+		margin-top: 30rpx;
+		font-size: $font-lg;
+		border-radius: 10rpx;
+		// box-shadow: 1px 2px 5px rgba(219, 63, 96, 0.4);
+	}
+
+	.list {
+		padding-left: 30rpx;
+		margin-top: 30rpx;
+		background-color: #ffffff;
+
+		.box {
+			display: flex;
+			align-items: center;
+			width: 100%;
+			height: 120rpx;
+			border-bottom: 1px solid $border-color-light;
+
+			.icon {
+				font-size: 48rpx;
+				padding-right: 20rpx;
+
+				.icon-img {
+					height: 50rpx;
+					width: 50rpx;
+				}
+			}
+
+			.iconweixin1 {
+				color: #18bf16;
+			}
+
+			.iconzhifubao {
+				color: #08aaec;
+			}
+
+			.title-box {
+				flex-grow: 1;
+				text-align: left;
+
+				.title {
+					font-size: $font-base + 2rpx;
+					color: $font-color-base;
+				}
+
+				.node {
+					font-size: $font-sm;
+					color: $font-color-light;
+				}
+			}
+		}
+	}
+
+	/deep/ .uni-radio-input {
+		width: 45rpx;
+		height: 45rpx;
+	}
+
+	.row {
+		display: flex;
+		align-items: center;
+		position: relative;
+		padding: 0 30upx;
+		height: 110upx;
+		background: #fff;
+
+		.tit {
+			flex-shrink: 0;
+			width: 250upx;
+			font-size: 30upx;
+			color: $font-color-dark;
+		}
+
+		.input {
+			flex: 1;
+			font-size: 30upx;
+			color: $font-color-dark;
+		}
+
+		.iconlocation {
+			font-size: 36upx;
+			color: $font-color-light;
+		}
+	}
+</style>

+ 697 - 0
pages/cart/cart.vue

@@ -0,0 +1,697 @@
+<template>
+	<view class="container">
+		<!-- 空白页 -->
+		<view v-if="!hasLogin || empty === true" class="empty">
+			<image src="/static/error/emptyCart.png" class="emptyImg" mode="aspectFit"></image>
+			<view v-if="hasLogin" class="empty-tips">
+				空空如也
+				<navigator class="navigator" v-if="hasLogin" url="../index/index" open-type="switchTab">随便逛逛>
+				</navigator>
+			</view>
+			<view v-else class="empty-tips">
+				空空如也
+				<view class="navigator" @click="navToLogin">去登陆></view>
+			</view>
+		</view>
+		<view v-else>
+			<!-- 购物车头部 -->
+			<view class="cart-hand flex">
+				<view class="hand-tit">
+					购物车共 <text>{{ ' '+cartList.length}} 件</text>商品
+				</view>
+				<view class="hand-btn" @click="clearCart()">
+					清空购物车
+				</view>
+			</view>
+			<!-- 列表 -->
+			<view class="cart-list">
+				<block v-for="(item, index) in cartList" :key="item.id">
+					<view class="cart-item" :class="{ 'b-b': index !== cartList.length - 1 }">
+						<view class="image-wrapper">
+							<image :src="item.productInfo.image" :class="[item.loaded]" mode="aspectFill" lazy-load
+								@load="onImageLoad('cartList', index)" @error="onImageError('cartList', index)"></image>
+							<view class="iconfont iconroundcheckfill checkbox" :class="{ checked: item.checked }"
+								@click="check('item', index)"></view>
+						</view>
+						<view class="item-right">
+							<text class="clamp title">{{ item.productInfo.store_name }}</text>
+							<text class="price">¥{{ item.productInfo.price }}</text>
+							<view class="munbox flex">
+								<image src="../../static/icon/reduce.png" mode="" @click="reduce(item,index)"></image>
+								<input type="munber" :value="item.cart_num*1" disabled />
+								<image src="../../static/icon/add.png" mode="" @click="add(item)"></image>
+							</view>
+						</view>
+					</view>
+				</block>
+			</view>
+			<!-- 底部菜单栏 -->
+			<view class="action-section">
+				<view class="checkbox">
+					<view class="iconfont iconroundcheckfill icon-checked-box" @click="check('all')"
+						:class="{ 'icon-checked': allChecked }"></view>
+				</view>
+				<view class="total-box">
+					<text class="price">合计:¥{{ total }}</text>
+				</view>
+				<button type="primary" class="no-border confirm-btn" @click="createOrder">去结算</button>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		getCartList,
+		getCartNum,
+		cartDel
+	} from '@/api/cart.js';
+	import {
+		mapState
+	} from 'vuex';
+	import uniNumberBox from '@/components/uni-number-box.vue';
+	import {
+		saveUrl,
+		interceptor
+	} from '@/utils/loginUtils.js';
+	export default {
+		components: {
+			uniNumberBox
+		},
+		data() {
+			return {
+				total: 0, //总价格
+				allChecked: false, //全选状态  true|false
+				empty: false, //空白页现实  true|false
+				cartList: [],
+				code: '', //商品条码
+			};
+		},
+		onShow() {
+			// 只有登录时才加载数据
+			if (this.hasLogin) {
+				this.loadData();
+			}
+		},
+		watch: {
+			//显示空白页
+			cartList(e) {
+				let empty = e.length === 0 ? true : false;
+				if (this.empty !== empty) {
+					this.empty = empty;
+				}
+			}
+		},
+		computed: {
+			...mapState(['weichatObj']),
+			...mapState('user', ['hasLogin'])
+		},
+		methods: {
+			reduce(item, index) {
+				if (item.cart_num == 1) {
+					uni.showModal({
+						content: '删除该商品?',
+						success: e => {
+							if (e.confirm) {
+								this.deleteCartItem(index)
+							}
+						}
+					});
+
+				} else {
+					item.cart_num--
+					this.newNumberChange(item)
+				}
+			},
+			add(item) {
+				console.log(item)
+				if (item.productInfo.stock > item.cart_num) {
+					item.cart_num++
+					this.newNumberChange(item)
+				} else {
+					return
+				}
+			},
+			//请求数据
+			async loadData() {
+				let obj = this;
+				getCartList({
+					type:0
+				})
+					.then(function(e) {
+						// 获取当前购物车物品增加数量
+						let nub = obj.cartList.length;
+						// 获取之前对象数组
+						let aArray = obj.cartList.reverse();
+						// 获取返回数据对象数组
+						let bArray = e.data.valid.reverse();
+						obj.cartList = bArray
+							.map((item, ind) => {
+								// 设置返回数据默认为勾选状态
+								item.checked = true;
+								// 获取相同数组之前对象的数据
+								let carlist = aArray[ind];
+								// 判断之前是否已经加载完毕
+								if (carlist && carlist.loaded == 'loaded') {
+									item.loaded = 'loaded';
+								}
+								return item;
+							})
+							.reverse();
+						obj.calcTotal(); //计算总价
+					})
+					.catch(function(e) {
+						console.log(e);
+					});
+			},
+			//监听image加载完成
+			onImageLoad(key, index) {
+				// 修改载入完成后图片class样式
+				this.$set(this[key][index], 'loaded', 'loaded');
+			},
+			//监听image加载失败
+			onImageError(key, index) {
+				this[key][index].image = '/static/error/errorImage.jpg';
+			},
+			// 跳转到登录页
+			navToLogin() {
+				// 保存地址
+				saveUrl();
+				// 登录拦截
+				interceptor();
+			},
+			//选中状态处理
+			check(type, index) {
+				if (type === 'item') {
+					this.cartList[index].checked = !this.cartList[index].checked;
+				} else {
+					const checked = !this.allChecked;
+					const list = this.cartList;
+					list.forEach(item => {
+						item.checked = checked;
+					});
+					this.allChecked = checked;
+				}
+				this.calcTotal(type);
+			},
+			//数量
+			numberChange(data) {
+				let arr = this.cartList[data.index];
+				arr.cart_num = data.number;
+				getCartNum({
+						id: arr.id,
+						number: data.number
+					})
+					.then(e => {
+						console.log(e);
+					})
+					.catch(function(e) {
+						console.log(e);
+					});
+				this.calcTotal();
+			},
+			newNumberChange(item) {
+				getCartNum({
+						id: item.id,
+						number: item.cart_num
+					})
+					.then(e => {
+						console.log(e);
+					})
+					.catch(function(e) {
+						console.log(e);
+					});
+				this.calcTotal();
+			},
+			//删除
+			deleteCartItem(index) {
+				let list = this.cartList;
+				let row = list[index];
+				let id = row.id;
+				cartDel({
+					ids: id
+				});
+				this.cartList.splice(index, 1);
+				uni.hideLoading();
+				this.calcTotal();
+			},
+			//清空
+			clearCart() {
+				uni.showModal({
+					content: '清空购物车?',
+					success: e => {
+						if (e.confirm) {
+							let st = this.cartList.map(e => {
+								return e.id;
+							});
+							cartDel({
+								ids: st.join(',')
+							}).then(e => {
+								console.log(e);
+							});
+							this.cartList = [];
+						}
+					}
+				});
+			},
+			//计算总价
+			calcTotal() {
+				let list = this.cartList;
+				if (list.length === 0) {
+					this.empty = true;
+					return;
+				}
+				let total = 0;
+				let checked = true;
+				list.forEach(item => {
+					if (item.checked === true) {
+						total += item.productInfo.price * item.cart_num;
+					} else if (checked === true) {
+						checked = false;
+					}
+				});
+				this.allChecked = checked;
+				this.total = Number(total.toFixed(2));
+			},
+			//创建订单
+			createOrder() {
+				let list = this.cartList;
+				let goodsData = [];
+				list.forEach(item => {
+					if (item.checked) {
+						goodsData.push(item.id);
+					}
+				});
+
+				uni.navigateTo({
+					url: '/pages/order/createOrder?id=' + goodsData.join(',')
+				});
+			},
+		}
+	};
+</script>
+
+<style lang="scss">
+	.container {
+		padding-bottom: 134rpx;
+		background-color: $page-color-base;
+
+		/* 空白页 */
+		.empty {
+			position: fixed;
+			left: 0;
+			top: 0;
+			width: 100%;
+			height: 100vh;
+			padding-bottom: 100rpx;
+			display: flex;
+			justify-content: center;
+			flex-direction: column;
+			align-items: center;
+			background: #fff;
+
+			.emptyImg {
+				width: 300rpx;
+				height: 250rpx;
+				margin-bottom: 30rpx;
+			}
+
+			.empty-tips {
+				display: flex;
+				font-size: $font-sm + 2rpx;
+				color: $font-color-disabled;
+
+				.navigator {
+					color: $uni-color-primary;
+					margin-left: 16rpx;
+				}
+			}
+		}
+	}
+
+	/* 购物车列表项 */
+	.cart-item {
+		width: 710rpx;
+		height: 210rpx;
+		background: #FFFFFF;
+		box-shadow: 0px 0px 10rpx 0rpx rgba(0, 0, 0, 0.1);
+		border-radius: 10rpx;
+		margin: 20rpx auto;
+
+		display: flex;
+		position: relative;
+		padding: 30rpx 26rpx 30rpx 80rpx;
+
+		.image-wrapper {
+			width: 150rpx;
+			height: 150rpx;
+			flex-shrink: 0;
+			position: relative;
+
+			image {
+				border-radius: 8rpx;
+			}
+		}
+
+		.checkbox {
+			display: flex;
+			position: absolute;
+			top: 0;
+			bottom: 0;
+			left: -65rpx;
+			margin: auto 0;
+			height: 50rpx;
+			z-index: 8;
+			font-size: 44rpx;
+			line-height: 1;
+			padding: 4rpx;
+			color: $font-color-disabled;
+			background: #fff;
+			border-radius: 50px;
+		}
+
+		.item-right {
+			display: flex;
+			flex-direction: column;
+			flex: 1;
+			overflow: hidden;
+			position: relative;
+			padding-left: 30rpx;
+
+			.munbox {
+				width: 144rpx;
+				height: 44rpx;
+				position: absolute;
+				bottom: 0;
+				right: 0;
+
+				input {
+					display: inline-block;
+					text-align: center;
+				}
+
+				image {
+					flex-shrink: 0;
+					width: 44rpx;
+					height: 44rpx;
+				}
+			}
+
+			.title,
+			.price {
+				font-size: $font-base + 2rpx;
+				color: $font-color-dark;
+				height: 40rpx;
+				line-height: 40rpx;
+			}
+
+			.attr {
+				font-size: $font-sm + 2rpx;
+				color: $font-color-light;
+				height: 50rpx;
+				line-height: 50rpx;
+				font-size: 26rpx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #999999;
+			}
+
+			.price {
+				padding-top: 20rpx;
+				font-size: 34rpx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #FF4C4C;
+			}
+
+			.step {
+				margin-top: 20rpx;
+			}
+
+			.title {
+				font-size: 34rpx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #333333;
+			}
+		}
+
+		.del-btn {
+			padding: 4rpx 10rpx;
+			font-size: 34rpx;
+			height: 50rpx;
+			color: $font-color-light;
+		}
+	}
+
+	/* 底部栏 */
+	.action-section {
+		/* #ifdef H5 */
+		margin-bottom: 50px;
+		/* #endif */
+		position: fixed;
+		left: 0rpx;
+		bottom: 0rpx;
+		z-index: 95;
+		display: flex;
+		align-items: center;
+		width: 750rpx;
+		height: 100rpx;
+		padding: 0 30rpx;
+		background: #fff;
+		.checkbox {
+			height: 52rpx;
+			position: relative;
+
+			.icon-checked-box {
+				border-radius: 50rpx;
+				background-color: #ffffff;
+				width: 52rpx;
+				height: 100%;
+				position: relative;
+				z-index: 5;
+				font-size: 53rpx;
+				line-height: 1;
+				color: $font-color-light;
+
+				&::after {
+					content: '全选';
+					width: 100rpx;
+					position: absolute;
+					top: 0;
+					bottom: 0;
+					left: 52rpx;
+					margin: auto;
+					line-height: 1.5;
+					padding-left: 10rpx;
+					font-size: 32rpx;
+					font-family: PingFang SC;
+					font-weight: bold;
+					color: #767477;
+				}
+			}
+
+			.icon-checked {
+				color: $base-color;
+			}
+		}
+
+		.clear-btn {
+			position: absolute;
+			left: 26rpx;
+			top: 0;
+			z-index: 4;
+			width: 0;
+			height: 52rpx;
+			line-height: 52rpx;
+			padding-left: 38rpx;
+			font-size: $font-base;
+			color: #fff;
+			background: $font-color-disabled;
+			border-radius: 0 50px 50px 0;
+			opacity: 0;
+			transition: 0.2s;
+
+			&.show {
+				opacity: 1;
+				width: 120rpx;
+			}
+		}
+
+		.total-box {
+			flex: 1;
+			display: flex;
+			flex-direction: column;
+			text-align: right;
+			padding-right: 40rpx;
+			color: #FF6F0F;
+			font-weight: bold;
+
+			.price {
+				font-size: 32rpx;
+			}
+
+			.coupon {
+				font-size: $font-sm;
+				text {
+					font-weight: bold;
+					color: $font-color-dark;
+				}
+			}
+		}
+
+		.confirm-btn {
+			padding: 0 38rpx;
+			margin: 0;
+			border-radius: 100px;
+			height: 76rpx;
+			line-height: 76rpx;
+			font-size: $font-base + 2rpx;
+			background: $base-color;
+			font-weight: bold;
+		}
+	}
+
+	/* 复选框选中状态 */
+	.action-section .checkbox.checked,
+	.cart-item .checkbox.checked {
+		color: $base-color;
+	}
+
+	.cart-hand {
+		width: 750rpx;
+		height: 88rpx;
+		background: #FFFFFF;
+		font-size: 30rpx;
+		font-family: PingFang SC;
+		font-weight: bold;
+		color: #333333;
+		line-height: 88rpx;
+		padding-left: 28rpx;
+		padding-right: 26rpx;
+		position: sticky;
+		top: 0rpx;
+		z-index: 99;
+
+		.hand-tit {
+			text {
+				color: #FF4C4C;
+			}
+		}
+
+		.hand-btn {
+			width: 164rpx;
+			height: 62rpx;
+			border: 2rpx solid #FF4C4C;
+			border-radius: 31rpx;
+			font-size: 26rpx;
+			font-family: PingFang SC;
+			font-weight: bold;
+			color: #FF4C4C;
+			line-height: 62rpx;
+			text-align: center;
+		}
+	}
+
+	.btm-btn {
+		z-index: 95;
+		display: flex;
+		position: fixed;
+		bottom: 0;
+		text-align: center;
+		font-size: 32rpx;
+		font-family: PingFang SC;
+		font-weight: bold;
+		color: #FFFFFF;
+		line-height: 97rpx;
+		width: 750rpx;
+
+		.btn-item {
+			height: 100%;
+			width: 50%;
+			background-color: #31332d;
+		}
+
+		.btn-item1 {
+			background-color: #5DBC7C;
+		}
+	}
+
+	.cart-list {
+		padding-bottom: 97rpx;
+	}
+
+	.hx-wrapper {
+		width: 536rpx;
+		height: 630rpx;
+		position: relative;
+
+		.hx-img {
+			width: 536rpx;
+			height: 281rpx;
+
+			image {
+				width: 536rpx;
+				height: 281rpx;
+			}
+		}
+
+		.hx-close {
+			position: absolute;
+			left: 243rpx;
+			bottom: -80rpx;
+			width: 52rpx;
+			height: 52rpx;
+
+			image {
+				width: 52rpx;
+				height: 52rpx;
+			}
+		}
+
+		.hx-body {
+			width: 536rpx;
+			height: 349rpx;
+			background-color: #fff;
+			border-radius: 0 0 10rpx 10rpx;
+
+			.hx-title {
+				width: 536rpx;
+				font-size: 36rpx;
+				font-weight: 500;
+				color: #333333;
+				line-height: 1;
+				padding-top: 42rpx;
+				text-align: center;
+			}
+
+			input {
+				width: 439rpx;
+				height: 68rpx;
+				background: #DBF3E9;
+				border-radius: 10rpx;
+				margin: 39rpx auto 0;
+				padding-left: 26rpx;
+
+				.hx-placeholder {
+					font-size: 26rpx;
+					font-weight: 500;
+					color: #52C696;
+				}
+			}
+
+			.hx-btn {
+				margin: 44rpx auto 0;
+				width: 353rpx;
+				height: 71rpx;
+				background: #52C696;
+				border-radius: 34rpx;
+				font-size: 36rpx;
+				font-weight: 500;
+				color: #F8F9F9;
+				line-height: 71rpx;
+				text-align: center;
+			}
+		}
+	}
+</style>

+ 733 - 0
pages/cart/cart2.vue

@@ -0,0 +1,733 @@
+<template>
+	<view class="container">
+		<!-- 空白页 -->
+		<view v-if="!hasLogin || empty === true" class="empty">
+			<image src="/static/error/emptyCart.png" class="emptyImg" mode="aspectFit"></image>
+			<view v-if="hasLogin" class="empty-tips">
+				空空如也
+				<navigator class="navigator" v-if="hasLogin" url="../index/index" open-type="switchTab">随便逛逛>
+				</navigator>
+			</view>
+			<view v-else class="empty-tips">
+				空空如也
+				<view class="navigator" @click="navToLogin">去登陆></view>
+			</view>
+		</view>
+		<view v-else>
+			<!-- 购物车头部 -->
+			<view class="cart-hand flex">
+				<view class="hand-tit">
+					购物车共 <text>{{ ' '+cartList.length}} 件</text>商品
+				</view>
+				<view class="hand-btn" @click="clearCart()">
+					清空购物车
+				</view>
+			</view>
+			<!-- 列表 -->
+			<view class="cart-list">
+				<block v-for="(item, index) in cartList" :key="item.id">
+					<view class="cart-item" :class="{ 'b-b': index !== cartList.length - 1 }">
+						<view class="image-wrapper">
+							<image :src="item.productInfo.image" :class="[item.loaded]" mode="aspectFill" lazy-load
+								@load="onImageLoad('cartList', index)" @error="onImageError('cartList', index)"></image>
+							<view class="iconfont iconroundcheckfill checkbox" :class="{ checked: item.checked }"
+								@click="check('item', index)"></view>
+						</view>
+						<view class="item-right">
+							<text class="clamp title">{{ item.productInfo.store_name }}</text>
+							<!-- <text class="attr">{{ item.productInfo.attrInfo.suk }}</text> -->
+							<text class="price">¥{{ item.productInfo.price }}</text>
+							<!-- <uni-number-box
+								class="step"
+								:min="1"
+								:max="item.productInfo.stock"
+								:value="item.cart_num > item.productInfo.stock ? item.productInfo.stock : item.cart_num"
+								:isMax="item.cart_num >= item.productInfo.stock ? true : false"
+								:isMin="item.cart_num === 1"
+								:index="index"
+								@eventChange="numberChange"
+							></uni-number-box> -->
+							<view class="munbox flex">
+								<image src="../../static/icon/reduce.png" mode="" @click="reduce(item,index)"></image>
+								<input type="munber" :value="item.cart_num*1" disabled />
+								<image src="../../static/icon/add.png" mode="" @click="add(item)"></image>
+							</view>
+						</view>
+						<!-- <text class="del-btn iconfont iconclose" @click="deleteCartItem(index)"></text> -->
+					</view>
+				</block>
+			</view>
+			<!-- 底部菜单栏 -->
+			<view class="action-section">
+				<view class="checkbox">
+					<view class="iconfont iconroundcheckfill icon-checked-box" @click="check('all')"
+						:class="{ 'icon-checked': allChecked }"></view>
+					<!-- <view class="clear-btn" @click="allChecked ? clearCart() : ''" :class="{ show: allChecked }"><text>清空</text></view> -->
+				</view>
+				<view class="total-box">
+					<text class="price">合计:¥{{ total }}</text>
+					<!-- <text class="coupon">
+						已优惠
+						<text>74.35</text>
+						元
+					</text> -->
+				</view>
+				<button type="primary" class="no-border confirm-btn" @click="createOrder">去结算</button>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		getCartList,
+		getCartNum,
+		cartDel
+	} from '@/api/cart.js';
+	import {
+		mapState
+	} from 'vuex';
+	import uniNumberBox from '@/components/uni-number-box.vue';
+	import {
+		saveUrl,
+		interceptor
+	} from '@/utils/loginUtils.js';
+	export default {
+		components: {
+			uniNumberBox
+		},
+		data() {
+			return {
+				total: 0, //总价格
+				allChecked: false, //全选状态  true|false
+				empty: false, //空白页现实  true|false
+				cartList: [],
+				code: '', //商品条码
+			};
+		},
+		onShow() {
+			// 只有登录时才加载数据
+			if (this.hasLogin) {
+				this.loadData();
+			}
+		},
+		watch: {
+			//显示空白页
+			cartList(e) {
+				let empty = e.length === 0 ? true : false;
+				if (this.empty !== empty) {
+					this.empty = empty;
+				}
+			}
+		},
+		computed: {
+			...mapState(['weichatObj']),
+			...mapState('user', ['hasLogin'])
+		},
+		methods: {
+			reduce(item, index) {
+				if (item.cart_num == 1) {
+					uni.showModal({
+						content: '删除该商品?',
+						success: e => {
+							if (e.confirm) {
+								this.deleteCartItem(index)
+							}
+						}
+					});
+
+				} else {
+					item.cart_num--
+					this.newNumberChange(item)
+				}
+			},
+			add(item) {
+				console.log(item)
+				if (item.productInfo.stock > item.cart_num) {
+					item.cart_num++
+					this.newNumberChange(item)
+				} else {
+					return
+				}
+			},
+			//请求数据
+			async loadData() {
+				let obj = this;
+				getCartList({
+						type: 2
+					})
+					.then(function(e) {
+						// 获取当前购物车物品增加数量
+						let nub = obj.cartList.length;
+						// 获取之前对象数组
+						let aArray = obj.cartList.reverse();
+						// 获取返回数据对象数组
+						let bArray = e.data.valid.reverse();
+						obj.cartList = bArray
+							.map((item, ind) => {
+								// 设置返回数据默认为勾选状态
+								item.checked = true;
+								// 获取相同数组之前对象的数据
+								let carlist = aArray[ind];
+								// 判断之前是否已经加载完毕
+								if (carlist && carlist.loaded == 'loaded') {
+									item.loaded = 'loaded';
+								}
+								return item;
+							})
+							.reverse();
+						obj.calcTotal(); //计算总价
+					})
+					.catch(function(e) {
+						console.log(e);
+					});
+			},
+			//监听image加载完成
+			onImageLoad(key, index) {
+				// 修改载入完成后图片class样式
+				this.$set(this[key][index], 'loaded', 'loaded');
+			},
+			//监听image加载失败
+			onImageError(key, index) {
+				this[key][index].image = '/static/error/errorImage.jpg';
+			},
+			// 跳转到登录页
+			navToLogin() {
+				// 保存地址
+				saveUrl();
+				// 登录拦截
+				interceptor();
+			},
+			//选中状态处理
+			check(type, index) {
+				if (type === 'item') {
+					this.cartList[index].checked = !this.cartList[index].checked;
+				} else {
+					const checked = !this.allChecked;
+					const list = this.cartList;
+					list.forEach(item => {
+						item.checked = checked;
+					});
+					this.allChecked = checked;
+				}
+				this.calcTotal(type);
+			},
+			//数量
+			numberChange(data) {
+				let arr = this.cartList[data.index];
+				arr.cart_num = data.number;
+				getCartNum({
+						id: arr.id,
+						number: data.number
+					})
+					.then(e => {
+						console.log(e);
+					})
+					.catch(function(e) {
+						console.log(e);
+					});
+				this.calcTotal();
+			},
+			newNumberChange(item) {
+				getCartNum({
+						id: item.id,
+						number: item.cart_num
+					})
+					.then(e => {
+						console.log(e);
+					})
+					.catch(function(e) {
+						console.log(e);
+					});
+				this.calcTotal();
+			},
+			//删除
+			deleteCartItem(index) {
+				let list = this.cartList;
+				let row = list[index];
+				let id = row.id;
+				cartDel({
+					ids: id
+				});
+				this.cartList.splice(index, 1);
+				uni.hideLoading();
+				this.calcTotal();
+			},
+			//清空
+			clearCart() {
+				uni.showModal({
+					content: '清空购物车?',
+					success: e => {
+						if (e.confirm) {
+							let st = this.cartList.map(e => {
+								return e.id;
+							});
+							cartDel({
+								ids: st.join(',')
+							}).then(e => {
+								console.log(e);
+							});
+							this.cartList = [];
+						}
+					}
+				});
+			},
+			//计算总价
+			calcTotal() {
+				let list = this.cartList;
+				if (list.length === 0) {
+					this.empty = true;
+					return;
+				}
+				let total = 0;
+				let checked = true;
+				list.forEach(item => {
+					if (item.checked === true) {
+						total += item.productInfo.price * item.cart_num;
+					} else if (checked === true) {
+						checked = false;
+					}
+				});
+				this.allChecked = checked;
+				this.total = Number(total.toFixed(2));
+			},
+			//创建订单
+			createOrder() {
+				let list = this.cartList;
+				let goodsData = [];
+				list.forEach(item => {
+					if (item.checked) {
+						goodsData.push(item.id);
+					}
+				});
+
+				uni.navigateTo({
+					url: '/pages/order/createOrder?isRz=1&id=' + goodsData.join(',')
+				});
+			},
+		}
+	};
+</script>
+
+<style lang="scss">
+	.container {
+		padding-bottom: 134rpx;
+		background-color: $page-color-base;
+
+		/* 空白页 */
+		.empty {
+			position: fixed;
+			left: 0;
+			top: 0;
+			width: 100%;
+			height: 100vh;
+			padding-bottom: 100rpx;
+			display: flex;
+			justify-content: center;
+			flex-direction: column;
+			align-items: center;
+			background: #fff;
+
+			.emptyImg {
+				width: 300rpx;
+				height: 250rpx;
+				margin-bottom: 30rpx;
+			}
+
+			.empty-tips {
+				display: flex;
+				font-size: $font-sm + 2rpx;
+				color: $font-color-disabled;
+
+				.navigator {
+					color: $uni-color-primary;
+					margin-left: 16rpx;
+				}
+			}
+		}
+	}
+
+	/* 购物车列表项 */
+	.cart-item {
+		width: 710rpx;
+		height: 210rpx;
+		background: #FFFFFF;
+		box-shadow: 0px 0px 10rpx 0rpx rgba(0, 0, 0, 0.1);
+		border-radius: 10rpx;
+		margin: 20rpx auto;
+
+		display: flex;
+		position: relative;
+		padding: 30rpx 26rpx 30rpx 80rpx;
+
+		.image-wrapper {
+			width: 150rpx;
+			height: 150rpx;
+			flex-shrink: 0;
+			position: relative;
+
+			image {
+				border-radius: 8rpx;
+			}
+		}
+
+		.checkbox {
+			display: flex;
+			position: absolute;
+			top: 0;
+			bottom: 0;
+			left: -65rpx;
+			margin: auto 0;
+			height: 50rpx;
+			z-index: 8;
+			font-size: 44rpx;
+			line-height: 1;
+			padding: 4rpx;
+			color: $font-color-disabled;
+			background: #fff;
+			border-radius: 50px;
+		}
+
+		.item-right {
+			display: flex;
+			flex-direction: column;
+			flex: 1;
+			overflow: hidden;
+			position: relative;
+			padding-left: 30rpx;
+
+			.munbox {
+				width: 144rpx;
+				height: 44rpx;
+				position: absolute;
+				bottom: 0;
+				right: 0;
+
+				input {
+					display: inline-block;
+					text-align: center;
+				}
+
+				image {
+					flex-shrink: 0;
+					width: 44rpx;
+					height: 44rpx;
+				}
+			}
+
+			.title,
+			.price {
+				font-size: $font-base + 2rpx;
+				color: $font-color-dark;
+				height: 40rpx;
+				line-height: 40rpx;
+			}
+
+			.attr {
+				font-size: $font-sm + 2rpx;
+				color: $font-color-light;
+				height: 50rpx;
+				line-height: 50rpx;
+
+				font-size: 26rpx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #999999;
+			}
+
+			.price {
+				// height: 50rpx;
+				// line-height: 50rpx;
+				padding-top: 20rpx;
+				font-size: 34rpx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #FF4C4C;
+			}
+
+			.step {
+				margin-top: 20rpx;
+			}
+
+			.title {
+				font-size: 34rpx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #333333;
+			}
+		}
+
+		.del-btn {
+			padding: 4rpx 10rpx;
+			font-size: 34rpx;
+			height: 50rpx;
+			color: $font-color-light;
+		}
+	}
+
+	/* 底部栏 */
+	.action-section {
+		/* #ifdef H5 */
+		margin-bottom: 0px;
+		/* #endif */
+		position: fixed;
+		left: 0rpx;
+		bottom: 0rpx;
+		z-index: 95;
+		display: flex;
+		align-items: center;
+		width: 750rpx;
+		height: 100rpx;
+		padding: 0 30rpx;
+		// background: rgba(255, 255, 255, 0.9);
+		background: #fff;
+
+		// box-shadow: 0 0 20rpx 0 rgba(0, 0, 0, 0.5);
+		// border-radius: 16rpx;
+		.checkbox {
+			height: 52rpx;
+			position: relative;
+
+			.icon-checked-box {
+				border-radius: 50rpx;
+				background-color: #ffffff;
+				width: 52rpx;
+				height: 100%;
+				position: relative;
+				z-index: 5;
+				font-size: 53rpx;
+				line-height: 1;
+				color: $font-color-light;
+
+				&::after {
+					content: '全选';
+					width: 100rpx;
+					position: absolute;
+					top: 0;
+					bottom: 0;
+					left: 52rpx;
+					margin: auto;
+					line-height: 1.5;
+					padding-left: 10rpx;
+					font-size: 32rpx;
+					font-family: PingFang SC;
+					font-weight: bold;
+					color: #767477;
+				}
+			}
+
+			.icon-checked {
+				color: $base-color;
+			}
+		}
+
+		.clear-btn {
+			position: absolute;
+			left: 26rpx;
+			top: 0;
+			z-index: 4;
+			width: 0;
+			height: 52rpx;
+			line-height: 52rpx;
+			padding-left: 38rpx;
+			font-size: $font-base;
+			color: #fff;
+			background: $font-color-disabled;
+			border-radius: 0 50px 50px 0;
+			opacity: 0;
+			transition: 0.2s;
+
+			&.show {
+				opacity: 1;
+				width: 120rpx;
+			}
+		}
+
+		.total-box {
+			flex: 1;
+			display: flex;
+			flex-direction: column;
+			text-align: right;
+			padding-right: 40rpx;
+			color: #FF6F0F;
+			font-weight: bold;
+
+			.price {
+				font-size: 32rpx;
+
+				// font-size: $font-lg;
+				// color: $font-color-dark;
+
+			}
+
+			.coupon {
+				font-size: $font-sm;
+
+				// color: $font-color-light;
+				text {
+					font-weight: bold;
+					color: $font-color-dark;
+				}
+			}
+		}
+
+		.confirm-btn {
+			padding: 0 38rpx;
+			margin: 0;
+			border-radius: 100px;
+			height: 76rpx;
+			line-height: 76rpx;
+			font-size: $font-base + 2rpx;
+			background: $base-color;
+			font-weight: bold;
+		}
+	}
+
+	/* 复选框选中状态 */
+	.action-section .checkbox.checked,
+	.cart-item .checkbox.checked {
+		color: $base-color;
+	}
+
+	.cart-hand {
+		width: 750rpx;
+		height: 88rpx;
+		background: #FFFFFF;
+		font-size: 30rpx;
+		font-family: PingFang SC;
+		font-weight: bold;
+		color: #333333;
+		line-height: 88rpx;
+		padding-left: 28rpx;
+		padding-right: 26rpx;
+		position: sticky;
+		top: 0rpx;
+		z-index: 99;
+
+		.hand-tit {
+			text {
+				color: #FF4C4C;
+			}
+
+		}
+
+		.hand-btn {
+			width: 164rpx;
+			height: 62rpx;
+			border: 2rpx solid #FF4C4C;
+			border-radius: 31rpx;
+			font-size: 26rpx;
+			font-family: PingFang SC;
+			font-weight: bold;
+			color: #FF4C4C;
+			line-height: 62rpx;
+			text-align: center;
+		}
+	}
+
+	.btm-btn {
+		z-index: 95;
+		display: flex;
+		position: fixed;
+		bottom: 0;
+		text-align: center;
+		font-size: 32rpx;
+		font-family: PingFang SC;
+		font-weight: bold;
+		color: #FFFFFF;
+		line-height: 97rpx;
+		width: 750rpx;
+
+		.btn-item {
+			height: 100%;
+			width: 50%;
+			background-color: #31332d;
+		}
+
+		.btn-item1 {
+			background-color: #5DBC7C;
+		}
+	}
+
+	.cart-list {
+		// padding-top: 88rpx;
+		padding-bottom: 97rpx;
+	}
+
+	.hx-wrapper {
+		width: 536rpx;
+		height: 630rpx;
+		position: relative;
+
+		// background-color: #fff;
+		.hx-img {
+			width: 536rpx;
+			height: 281rpx;
+
+			image {
+				width: 536rpx;
+				height: 281rpx;
+			}
+		}
+
+		.hx-close {
+			position: absolute;
+			left: 243rpx;
+			bottom: -80rpx;
+			width: 52rpx;
+			height: 52rpx;
+
+			image {
+				width: 52rpx;
+				height: 52rpx;
+			}
+		}
+
+		.hx-body {
+			width: 536rpx;
+			height: 349rpx;
+			background-color: #fff;
+			border-radius: 0 0 10rpx 10rpx;
+
+			.hx-title {
+				width: 536rpx;
+				font-size: 36rpx;
+				font-weight: 500;
+				color: #333333;
+				line-height: 1;
+				padding-top: 42rpx;
+				text-align: center;
+			}
+
+			input {
+				width: 439rpx;
+				height: 68rpx;
+				background: #DBF3E9;
+				border-radius: 10rpx;
+				margin: 39rpx auto 0;
+				padding-left: 26rpx;
+
+				.hx-placeholder {
+					font-size: 26rpx;
+					font-weight: 500;
+					color: #52C696;
+				}
+			}
+
+			.hx-btn {
+				margin: 44rpx auto 0;
+				width: 353rpx;
+				height: 71rpx;
+				background: #52C696;
+				border-radius: 34rpx;
+				font-size: 36rpx;
+				font-weight: 500;
+				color: #F8F9F9;
+				line-height: 71rpx;
+				text-align: center;
+			}
+
+
+		}
+	}
+</style>

+ 733 - 0
pages/cart/cart4.vue

@@ -0,0 +1,733 @@
+<template>
+	<view class="container">
+		<!-- 空白页 -->
+		<view v-if="!hasLogin || empty === true" class="empty">
+			<image src="/static/error/emptyCart.png" class="emptyImg" mode="aspectFit"></image>
+			<view v-if="hasLogin" class="empty-tips">
+				空空如也
+				<navigator class="navigator" v-if="hasLogin" url="../index/index" open-type="switchTab">随便逛逛>
+				</navigator>
+			</view>
+			<view v-else class="empty-tips">
+				空空如也
+				<view class="navigator" @click="navToLogin">去登陆></view>
+			</view>
+		</view>
+		<view v-else>
+			<!-- 购物车头部 -->
+			<view class="cart-hand flex">
+				<view class="hand-tit">
+					购物车共 <text>{{ ' '+cartList.length}} 件</text>商品
+				</view>
+				<view class="hand-btn" @click="clearCart()">
+					清空购物车
+				</view>
+			</view>
+			<!-- 列表 -->
+			<view class="cart-list">
+				<block v-for="(item, index) in cartList" :key="item.id">
+					<view class="cart-item" :class="{ 'b-b': index !== cartList.length - 1 }">
+						<view class="image-wrapper">
+							<image :src="item.productInfo.image" :class="[item.loaded]" mode="aspectFill" lazy-load
+								@load="onImageLoad('cartList', index)" @error="onImageError('cartList', index)"></image>
+							<view class="iconfont iconroundcheckfill checkbox" :class="{ checked: item.checked }"
+								@click="check('item', index)"></view>
+						</view>
+						<view class="item-right">
+							<text class="clamp title">{{ item.productInfo.store_name }}</text>
+							<text class="attr">{{ item.use_integral }}积分</text>
+							<text class="price">¥{{ item.productInfo.price }}</text>
+							<!-- <uni-number-box
+								class="step"
+								:min="1"
+								:max="item.productInfo.stock"
+								:value="item.cart_num > item.productInfo.stock ? item.productInfo.stock : item.cart_num"
+								:isMax="item.cart_num >= item.productInfo.stock ? true : false"
+								:isMin="item.cart_num === 1"
+								:index="index"
+								@eventChange="numberChange"
+							></uni-number-box> -->
+							<view class="munbox flex">
+								<image src="../../static/icon/reduce.png" mode="" @click="reduce(item,index)"></image>
+								<input type="munber" :value="item.cart_num*1" disabled />
+								<image src="../../static/icon/add.png" mode="" @click="add(item)"></image>
+							</view>
+						</view>
+						<!-- <text class="del-btn iconfont iconclose" @click="deleteCartItem(index)"></text> -->
+					</view>
+				</block>
+			</view>
+			<!-- 底部菜单栏 -->
+			<view class="action-section">
+				<view class="checkbox">
+					<view class="iconfont iconroundcheckfill icon-checked-box" @click="check('all')"
+						:class="{ 'icon-checked': allChecked }"></view>
+					<!-- <view class="clear-btn" @click="allChecked ? clearCart() : ''" :class="{ show: allChecked }"><text>清空</text></view> -->
+				</view>
+				<view class="total-box">
+					<text class="price">合计:¥{{ total }}</text>
+					<!-- <text class="coupon">
+						已优惠
+						<text>74.35</text>
+						元
+					</text> -->
+				</view>
+				<button type="primary" class="no-border confirm-btn" @click="createOrder">去结算</button>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		getCartList,
+		getCartNum,
+		cartDel
+	} from '@/api/cart.js';
+	import {
+		mapState
+	} from 'vuex';
+	import uniNumberBox from '@/components/uni-number-box.vue';
+	import {
+		saveUrl,
+		interceptor
+	} from '@/utils/loginUtils.js';
+	export default {
+		components: {
+			uniNumberBox
+		},
+		data() {
+			return {
+				total: 0, //总价格
+				allChecked: false, //全选状态  true|false
+				empty: false, //空白页现实  true|false
+				cartList: [],
+				code: '', //商品条码
+			};
+		},
+		onShow() {
+			// 只有登录时才加载数据
+			if (this.hasLogin) {
+				this.loadData();
+			}
+		},
+		watch: {
+			//显示空白页
+			cartList(e) {
+				let empty = e.length === 0 ? true : false;
+				if (this.empty !== empty) {
+					this.empty = empty;
+				}
+			}
+		},
+		computed: {
+			...mapState(['weichatObj']),
+			...mapState('user', ['hasLogin'])
+		},
+		methods: {
+			reduce(item, index) {
+				if (item.cart_num == 1) {
+					uni.showModal({
+						content: '删除该商品?',
+						success: e => {
+							if (e.confirm) {
+								this.deleteCartItem(index)
+							}
+						}
+					});
+
+				} else {
+					item.cart_num--
+					this.newNumberChange(item)
+				}
+			},
+			add(item) {
+				console.log(item)
+				if (item.productInfo.stock > item.cart_num) {
+					item.cart_num++
+					this.newNumberChange(item)
+				} else {
+					return
+				}
+			},
+			//请求数据
+			async loadData() {
+				let obj = this;
+				getCartList({
+					type:4
+				})
+					.then(function(e) {
+						// 获取当前购物车物品增加数量
+						let nub = obj.cartList.length;
+						// 获取之前对象数组
+						let aArray = obj.cartList.reverse();
+						// 获取返回数据对象数组
+						let bArray = e.data.valid.reverse();
+						obj.cartList = bArray
+							.map((item, ind) => {
+								// 设置返回数据默认为勾选状态
+								item.checked = true;
+								// 获取相同数组之前对象的数据
+								let carlist = aArray[ind];
+								// 判断之前是否已经加载完毕
+								if (carlist && carlist.loaded == 'loaded') {
+									item.loaded = 'loaded';
+								}
+								return item;
+							})
+							.reverse();
+						obj.calcTotal(); //计算总价
+					})
+					.catch(function(e) {
+						console.log(e);
+					});
+			},
+			//监听image加载完成
+			onImageLoad(key, index) {
+				// 修改载入完成后图片class样式
+				this.$set(this[key][index], 'loaded', 'loaded');
+			},
+			//监听image加载失败
+			onImageError(key, index) {
+				this[key][index].image = '/static/error/errorImage.jpg';
+			},
+			// 跳转到登录页
+			navToLogin() {
+				// 保存地址
+				saveUrl();
+				// 登录拦截
+				interceptor();
+			},
+			//选中状态处理
+			check(type, index) {
+				if (type === 'item') {
+					this.cartList[index].checked = !this.cartList[index].checked;
+				} else {
+					const checked = !this.allChecked;
+					const list = this.cartList;
+					list.forEach(item => {
+						item.checked = checked;
+					});
+					this.allChecked = checked;
+				}
+				this.calcTotal(type);
+			},
+			//数量
+			numberChange(data) {
+				let arr = this.cartList[data.index];
+				arr.cart_num = data.number;
+				getCartNum({
+						id: arr.id,
+						number: data.number
+					})
+					.then(e => {
+						console.log(e);
+					})
+					.catch(function(e) {
+						console.log(e);
+					});
+				this.calcTotal();
+			},
+			newNumberChange(item) {
+				getCartNum({
+						id: item.id,
+						number: item.cart_num
+					})
+					.then(e => {
+						console.log(e);
+					})
+					.catch(function(e) {
+						console.log(e);
+					});
+				this.calcTotal();
+			},
+			//删除
+			deleteCartItem(index) {
+				let list = this.cartList;
+				let row = list[index];
+				let id = row.id;
+				cartDel({
+					ids: id
+				});
+				this.cartList.splice(index, 1);
+				uni.hideLoading();
+				this.calcTotal();
+			},
+			//清空
+			clearCart() {
+				uni.showModal({
+					content: '清空购物车?',
+					success: e => {
+						if (e.confirm) {
+							let st = this.cartList.map(e => {
+								return e.id;
+							});
+							cartDel({
+								ids: st.join(',')
+							}).then(e => {
+								console.log(e);
+							});
+							this.cartList = [];
+						}
+					}
+				});
+			},
+			//计算总价
+			calcTotal() {
+				let list = this.cartList;
+				if (list.length === 0) {
+					this.empty = true;
+					return;
+				}
+				let total = 0;
+				let checked = true;
+				list.forEach(item => {
+					if (item.checked === true) {
+						total += item.productInfo.price * item.cart_num;
+					} else if (checked === true) {
+						checked = false;
+					}
+				});
+				this.allChecked = checked;
+				this.total = Number(total.toFixed(2));
+			},
+			//创建订单
+			createOrder() {
+				let list = this.cartList;
+				let goodsData = [];
+				list.forEach(item => {
+					if (item.checked) {
+						goodsData.push(item.id);
+					}
+				});
+
+				uni.navigateTo({
+					url: '/pages/order/createOrder?goodsType=0&id=' + goodsData.join(',')
+				});
+			},
+		}
+	};
+</script>
+
+<style lang="scss">
+	.container {
+		padding-bottom: 134rpx;
+		background-color: $page-color-base;
+
+		/* 空白页 */
+		.empty {
+			position: fixed;
+			left: 0;
+			top: 0;
+			width: 100%;
+			height: 100vh;
+			padding-bottom: 100rpx;
+			display: flex;
+			justify-content: center;
+			flex-direction: column;
+			align-items: center;
+			background: #fff;
+
+			.emptyImg {
+				width: 300rpx;
+				height: 250rpx;
+				margin-bottom: 30rpx;
+			}
+
+			.empty-tips {
+				display: flex;
+				font-size: $font-sm + 2rpx;
+				color: $font-color-disabled;
+
+				.navigator {
+					color: $uni-color-primary;
+					margin-left: 16rpx;
+				}
+			}
+		}
+	}
+
+	/* 购物车列表项 */
+	.cart-item {
+		width: 710rpx;
+		height: 210rpx;
+		background: #FFFFFF;
+		box-shadow: 0px 0px 10rpx 0rpx rgba(0, 0, 0, 0.1);
+		border-radius: 10rpx;
+		margin: 20rpx auto;
+
+		display: flex;
+		position: relative;
+		padding: 30rpx 26rpx 30rpx 80rpx;
+
+		.image-wrapper {
+			width: 150rpx;
+			height: 150rpx;
+			flex-shrink: 0;
+			position: relative;
+
+			image {
+				border-radius: 8rpx;
+			}
+		}
+
+		.checkbox {
+			display: flex;
+			position: absolute;
+			top: 0;
+			bottom: 0;
+			left: -65rpx;
+			margin: auto 0;
+			height: 50rpx;
+			z-index: 8;
+			font-size: 44rpx;
+			line-height: 1;
+			padding: 4rpx;
+			color: $font-color-disabled;
+			background: #fff;
+			border-radius: 50px;
+		}
+
+		.item-right {
+			display: flex;
+			flex-direction: column;
+			flex: 1;
+			overflow: hidden;
+			position: relative;
+			padding-left: 30rpx;
+
+			.munbox {
+				width: 144rpx;
+				height: 44rpx;
+				position: absolute;
+				bottom: 0;
+				right: 0;
+
+				input {
+					display: inline-block;
+					text-align: center;
+				}
+
+				image {
+					flex-shrink: 0;
+					width: 44rpx;
+					height: 44rpx;
+				}
+			}
+
+			.title,
+			.price {
+				font-size: $font-base + 2rpx;
+				color: $font-color-dark;
+				height: 40rpx;
+				line-height: 40rpx;
+			}
+
+			.attr {
+				font-size: $font-sm + 2rpx;
+				color: $font-color-light;
+				height: 50rpx;
+				line-height: 50rpx;
+
+				font-size: 26rpx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #999999;
+			}
+
+			.price {
+				// height: 50rpx;
+				// line-height: 50rpx;
+				padding-top: 20rpx;
+				font-size: 34rpx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #FF4C4C;
+			}
+
+			.step {
+				margin-top: 20rpx;
+			}
+
+			.title {
+				font-size: 34rpx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #333333;
+			}
+		}
+
+		.del-btn {
+			padding: 4rpx 10rpx;
+			font-size: 34rpx;
+			height: 50rpx;
+			color: $font-color-light;
+		}
+	}
+
+	/* 底部栏 */
+	.action-section {
+		/* #ifdef H5 */
+		margin-bottom: 0px;
+		/* #endif */
+		position: fixed;
+		left: 0rpx;
+		bottom: 0rpx;
+		z-index: 95;
+		display: flex;
+		align-items: center;
+		width: 750rpx;
+		height: 100rpx;
+		padding: 0 30rpx;
+		// background: rgba(255, 255, 255, 0.9);
+		background: #fff;
+
+		// box-shadow: 0 0 20rpx 0 rgba(0, 0, 0, 0.5);
+		// border-radius: 16rpx;
+		.checkbox {
+			height: 52rpx;
+			position: relative;
+
+			.icon-checked-box {
+				border-radius: 50rpx;
+				background-color: #ffffff;
+				width: 52rpx;
+				height: 100%;
+				position: relative;
+				z-index: 5;
+				font-size: 53rpx;
+				line-height: 1;
+				color: $font-color-light;
+
+				&::after {
+					content: '全选';
+					width: 100rpx;
+					position: absolute;
+					top: 0;
+					bottom: 0;
+					left: 52rpx;
+					margin: auto;
+					line-height: 1.5;
+					padding-left: 10rpx;
+					font-size: 32rpx;
+					font-family: PingFang SC;
+					font-weight: bold;
+					color: #767477;
+				}
+			}
+
+			.icon-checked {
+				color: $base-color;
+			}
+		}
+
+		.clear-btn {
+			position: absolute;
+			left: 26rpx;
+			top: 0;
+			z-index: 4;
+			width: 0;
+			height: 52rpx;
+			line-height: 52rpx;
+			padding-left: 38rpx;
+			font-size: $font-base;
+			color: #fff;
+			background: $font-color-disabled;
+			border-radius: 0 50px 50px 0;
+			opacity: 0;
+			transition: 0.2s;
+
+			&.show {
+				opacity: 1;
+				width: 120rpx;
+			}
+		}
+
+		.total-box {
+			flex: 1;
+			display: flex;
+			flex-direction: column;
+			text-align: right;
+			padding-right: 40rpx;
+			color: #FF6F0F;
+			font-weight: bold;
+
+			.price {
+				font-size: 32rpx;
+
+				// font-size: $font-lg;
+				// color: $font-color-dark;
+
+			}
+
+			.coupon {
+				font-size: $font-sm;
+
+				// color: $font-color-light;
+				text {
+					font-weight: bold;
+					color: $font-color-dark;
+				}
+			}
+		}
+
+		.confirm-btn {
+			padding: 0 38rpx;
+			margin: 0;
+			border-radius: 100px;
+			height: 76rpx;
+			line-height: 76rpx;
+			font-size: $font-base + 2rpx;
+			background: $base-color;
+			font-weight: bold;
+		}
+	}
+
+	/* 复选框选中状态 */
+	.action-section .checkbox.checked,
+	.cart-item .checkbox.checked {
+		color: $base-color;
+	}
+
+	.cart-hand {
+		width: 750rpx;
+		height: 88rpx;
+		background: #FFFFFF;
+		font-size: 30rpx;
+		font-family: PingFang SC;
+		font-weight: bold;
+		color: #333333;
+		line-height: 88rpx;
+		padding-left: 28rpx;
+		padding-right: 26rpx;
+		position: sticky;
+		top: 0rpx;
+		z-index: 99;
+
+		.hand-tit {
+			text {
+				color: #FF4C4C;
+			}
+
+		}
+
+		.hand-btn {
+			width: 164rpx;
+			height: 62rpx;
+			border: 2rpx solid #FF4C4C;
+			border-radius: 31rpx;
+			font-size: 26rpx;
+			font-family: PingFang SC;
+			font-weight: bold;
+			color: #FF4C4C;
+			line-height: 62rpx;
+			text-align: center;
+		}
+	}
+
+	.btm-btn {
+		z-index: 95;
+		display: flex;
+		position: fixed;
+		bottom: 0;
+		text-align: center;
+		font-size: 32rpx;
+		font-family: PingFang SC;
+		font-weight: bold;
+		color: #FFFFFF;
+		line-height: 97rpx;
+		width: 750rpx;
+
+		.btn-item {
+			height: 100%;
+			width: 50%;
+			background-color: #31332d;
+		}
+
+		.btn-item1 {
+			background-color: #5DBC7C;
+		}
+	}
+
+	.cart-list {
+		// padding-top: 88rpx;
+		padding-bottom: 97rpx;
+	}
+
+	.hx-wrapper {
+		width: 536rpx;
+		height: 630rpx;
+		position: relative;
+
+		// background-color: #fff;
+		.hx-img {
+			width: 536rpx;
+			height: 281rpx;
+
+			image {
+				width: 536rpx;
+				height: 281rpx;
+			}
+		}
+
+		.hx-close {
+			position: absolute;
+			left: 243rpx;
+			bottom: -80rpx;
+			width: 52rpx;
+			height: 52rpx;
+
+			image {
+				width: 52rpx;
+				height: 52rpx;
+			}
+		}
+
+		.hx-body {
+			width: 536rpx;
+			height: 349rpx;
+			background-color: #fff;
+			border-radius: 0 0 10rpx 10rpx;
+
+			.hx-title {
+				width: 536rpx;
+				font-size: 36rpx;
+				font-weight: 500;
+				color: #333333;
+				line-height: 1;
+				padding-top: 42rpx;
+				text-align: center;
+			}
+
+			input {
+				width: 439rpx;
+				height: 68rpx;
+				background: #DBF3E9;
+				border-radius: 10rpx;
+				margin: 39rpx auto 0;
+				padding-left: 26rpx;
+
+				.hx-placeholder {
+					font-size: 26rpx;
+					font-weight: 500;
+					color: #52C696;
+				}
+			}
+
+			.hx-btn {
+				margin: 44rpx auto 0;
+				width: 353rpx;
+				height: 71rpx;
+				background: #52C696;
+				border-radius: 34rpx;
+				font-size: 36rpx;
+				font-weight: 500;
+				color: #F8F9F9;
+				line-height: 71rpx;
+				text-align: center;
+			}
+
+
+		}
+	}
+</style>

+ 733 - 0
pages/cart/cart5.vue

@@ -0,0 +1,733 @@
+<template>
+	<view class="container">
+		<!-- 空白页 -->
+		<view v-if="!hasLogin || empty === true" class="empty">
+			<image src="/static/error/emptyCart.png" class="emptyImg" mode="aspectFit"></image>
+			<view v-if="hasLogin" class="empty-tips">
+				空空如也
+				<navigator class="navigator" v-if="hasLogin" url="../index/index" open-type="switchTab">随便逛逛>
+				</navigator>
+			</view>
+			<view v-else class="empty-tips">
+				空空如也
+				<view class="navigator" @click="navToLogin">去登陆></view>
+			</view>
+		</view>
+		<view v-else>
+			<!-- 购物车头部 -->
+			<view class="cart-hand flex">
+				<view class="hand-tit">
+					购物车共 <text>{{ ' '+cartList.length}} 件</text>商品
+				</view>
+				<view class="hand-btn" @click="clearCart()">
+					清空购物车
+				</view>
+			</view>
+			<!-- 列表 -->
+			<view class="cart-list">
+				<block v-for="(item, index) in cartList" :key="item.id">
+					<view class="cart-item" :class="{ 'b-b': index !== cartList.length - 1 }">
+						<view class="image-wrapper">
+							<image :src="item.productInfo.image" :class="[item.loaded]" mode="aspectFill" lazy-load
+								@load="onImageLoad('cartList', index)" @error="onImageError('cartList', index)"></image>
+							<view class="iconfont iconroundcheckfill checkbox" :class="{ checked: item.checked }"
+								@click="check('item', index)"></view>
+						</view>
+						<view class="item-right">
+							<text class="clamp title">{{ item.productInfo.store_name }}</text>
+							<!-- <text class="attr">{{ item.productInfo.attrInfo.suk }}</text> -->
+							<text class="price">¥{{ item.productInfo.price }}</text>
+							<!-- <uni-number-box
+								class="step"
+								:min="1"
+								:max="item.productInfo.stock"
+								:value="item.cart_num > item.productInfo.stock ? item.productInfo.stock : item.cart_num"
+								:isMax="item.cart_num >= item.productInfo.stock ? true : false"
+								:isMin="item.cart_num === 1"
+								:index="index"
+								@eventChange="numberChange"
+							></uni-number-box> -->
+							<view class="munbox flex">
+								<image src="../../static/icon/reduce.png" mode="" @click="reduce(item,index)"></image>
+								<input type="munber" :value="item.cart_num*1" disabled />
+								<image src="../../static/icon/add.png" mode="" @click="add(item)"></image>
+							</view>
+						</view>
+						<!-- <text class="del-btn iconfont iconclose" @click="deleteCartItem(index)"></text> -->
+					</view>
+				</block>
+			</view>
+			<!-- 底部菜单栏 -->
+			<view class="action-section">
+				<view class="checkbox">
+					<view class="iconfont iconroundcheckfill icon-checked-box" @click="check('all')"
+						:class="{ 'icon-checked': allChecked }"></view>
+					<!-- <view class="clear-btn" @click="allChecked ? clearCart() : ''" :class="{ show: allChecked }"><text>清空</text></view> -->
+				</view>
+				<view class="total-box">
+					<text class="price">合计:¥{{ total }}</text>
+					<!-- <text class="coupon">
+						已优惠
+						<text>74.35</text>
+						元
+					</text> -->
+				</view>
+				<button type="primary" class="no-border confirm-btn" @click="createOrder">去结算</button>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		getCartList,
+		getCartNum,
+		cartDel
+	} from '@/api/cart.js';
+	import {
+		mapState
+	} from 'vuex';
+	import uniNumberBox from '@/components/uni-number-box.vue';
+	import {
+		saveUrl,
+		interceptor
+	} from '@/utils/loginUtils.js';
+	export default {
+		components: {
+			uniNumberBox
+		},
+		data() {
+			return {
+				total: 0, //总价格
+				allChecked: false, //全选状态  true|false
+				empty: false, //空白页现实  true|false
+				cartList: [],
+				code: '', //商品条码
+			};
+		},
+		onShow() {
+			// 只有登录时才加载数据
+			if (this.hasLogin) {
+				this.loadData();
+			}
+		},
+		watch: {
+			//显示空白页
+			cartList(e) {
+				let empty = e.length === 0 ? true : false;
+				if (this.empty !== empty) {
+					this.empty = empty;
+				}
+			}
+		},
+		computed: {
+			...mapState(['weichatObj']),
+			...mapState('user', ['hasLogin'])
+		},
+		methods: {
+			reduce(item, index) {
+				if (item.cart_num == 1) {
+					uni.showModal({
+						content: '删除该商品?',
+						success: e => {
+							if (e.confirm) {
+								this.deleteCartItem(index)
+							}
+						}
+					});
+
+				} else {
+					item.cart_num--
+					this.newNumberChange(item)
+				}
+			},
+			add(item) {
+				console.log(item)
+				if (item.productInfo.stock > item.cart_num) {
+					item.cart_num++
+					this.newNumberChange(item)
+				} else {
+					return
+				}
+			},
+			//请求数据
+			async loadData() {
+				let obj = this;
+				getCartList({
+					type:5
+				})
+					.then(function(e) {
+						// 获取当前购物车物品增加数量
+						let nub = obj.cartList.length;
+						// 获取之前对象数组
+						let aArray = obj.cartList.reverse();
+						// 获取返回数据对象数组
+						let bArray = e.data.valid.reverse();
+						obj.cartList = bArray
+							.map((item, ind) => {
+								// 设置返回数据默认为勾选状态
+								item.checked = true;
+								// 获取相同数组之前对象的数据
+								let carlist = aArray[ind];
+								// 判断之前是否已经加载完毕
+								if (carlist && carlist.loaded == 'loaded') {
+									item.loaded = 'loaded';
+								}
+								return item;
+							})
+							.reverse();
+						obj.calcTotal(); //计算总价
+					})
+					.catch(function(e) {
+						console.log(e);
+					});
+			},
+			//监听image加载完成
+			onImageLoad(key, index) {
+				// 修改载入完成后图片class样式
+				this.$set(this[key][index], 'loaded', 'loaded');
+			},
+			//监听image加载失败
+			onImageError(key, index) {
+				this[key][index].image = '/static/error/errorImage.jpg';
+			},
+			// 跳转到登录页
+			navToLogin() {
+				// 保存地址
+				saveUrl();
+				// 登录拦截
+				interceptor();
+			},
+			//选中状态处理
+			check(type, index) {
+				if (type === 'item') {
+					this.cartList[index].checked = !this.cartList[index].checked;
+				} else {
+					const checked = !this.allChecked;
+					const list = this.cartList;
+					list.forEach(item => {
+						item.checked = checked;
+					});
+					this.allChecked = checked;
+				}
+				this.calcTotal(type);
+			},
+			//数量
+			numberChange(data) {
+				let arr = this.cartList[data.index];
+				arr.cart_num = data.number;
+				getCartNum({
+						id: arr.id,
+						number: data.number
+					})
+					.then(e => {
+						console.log(e);
+					})
+					.catch(function(e) {
+						console.log(e);
+					});
+				this.calcTotal();
+			},
+			newNumberChange(item) {
+				getCartNum({
+						id: item.id,
+						number: item.cart_num
+					})
+					.then(e => {
+						console.log(e);
+					})
+					.catch(function(e) {
+						console.log(e);
+					});
+				this.calcTotal();
+			},
+			//删除
+			deleteCartItem(index) {
+				let list = this.cartList;
+				let row = list[index];
+				let id = row.id;
+				cartDel({
+					ids: id
+				});
+				this.cartList.splice(index, 1);
+				uni.hideLoading();
+				this.calcTotal();
+			},
+			//清空
+			clearCart() {
+				uni.showModal({
+					content: '清空购物车?',
+					success: e => {
+						if (e.confirm) {
+							let st = this.cartList.map(e => {
+								return e.id;
+							});
+							cartDel({
+								ids: st.join(',')
+							}).then(e => {
+								console.log(e);
+							});
+							this.cartList = [];
+						}
+					}
+				});
+			},
+			//计算总价
+			calcTotal() {
+				let list = this.cartList;
+				if (list.length === 0) {
+					this.empty = true;
+					return;
+				}
+				let total = 0;
+				let checked = true;
+				list.forEach(item => {
+					if (item.checked === true) {
+						total += item.productInfo.price * item.cart_num;
+					} else if (checked === true) {
+						checked = false;
+					}
+				});
+				this.allChecked = checked;
+				this.total = Number(total.toFixed(2));
+			},
+			//创建订单
+			createOrder() {
+				let list = this.cartList;
+				let goodsData = [];
+				list.forEach(item => {
+					if (item.checked) {
+						goodsData.push(item.id);
+					}
+				});
+
+				uni.navigateTo({
+					url: '/pages/order/createOrder?id=' + goodsData.join(',')
+				});
+			},
+		}
+	};
+</script>
+
+<style lang="scss">
+	.container {
+		padding-bottom: 134rpx;
+		background-color: $page-color-base;
+
+		/* 空白页 */
+		.empty {
+			position: fixed;
+			left: 0;
+			top: 0;
+			width: 100%;
+			height: 100vh;
+			padding-bottom: 100rpx;
+			display: flex;
+			justify-content: center;
+			flex-direction: column;
+			align-items: center;
+			background: #fff;
+
+			.emptyImg {
+				width: 300rpx;
+				height: 250rpx;
+				margin-bottom: 30rpx;
+			}
+
+			.empty-tips {
+				display: flex;
+				font-size: $font-sm + 2rpx;
+				color: $font-color-disabled;
+
+				.navigator {
+					color: $uni-color-primary;
+					margin-left: 16rpx;
+				}
+			}
+		}
+	}
+
+	/* 购物车列表项 */
+	.cart-item {
+		width: 710rpx;
+		height: 210rpx;
+		background: #FFFFFF;
+		box-shadow: 0px 0px 10rpx 0rpx rgba(0, 0, 0, 0.1);
+		border-radius: 10rpx;
+		margin: 20rpx auto;
+
+		display: flex;
+		position: relative;
+		padding: 30rpx 26rpx 30rpx 80rpx;
+
+		.image-wrapper {
+			width: 150rpx;
+			height: 150rpx;
+			flex-shrink: 0;
+			position: relative;
+
+			image {
+				border-radius: 8rpx;
+			}
+		}
+
+		.checkbox {
+			display: flex;
+			position: absolute;
+			top: 0;
+			bottom: 0;
+			left: -65rpx;
+			margin: auto 0;
+			height: 50rpx;
+			z-index: 8;
+			font-size: 44rpx;
+			line-height: 1;
+			padding: 4rpx;
+			color: $font-color-disabled;
+			background: #fff;
+			border-radius: 50px;
+		}
+
+		.item-right {
+			display: flex;
+			flex-direction: column;
+			flex: 1;
+			overflow: hidden;
+			position: relative;
+			padding-left: 30rpx;
+
+			.munbox {
+				width: 144rpx;
+				height: 44rpx;
+				position: absolute;
+				bottom: 0;
+				right: 0;
+
+				input {
+					display: inline-block;
+					text-align: center;
+				}
+
+				image {
+					flex-shrink: 0;
+					width: 44rpx;
+					height: 44rpx;
+				}
+			}
+
+			.title,
+			.price {
+				font-size: $font-base + 2rpx;
+				color: $font-color-dark;
+				height: 40rpx;
+				line-height: 40rpx;
+			}
+
+			.attr {
+				font-size: $font-sm + 2rpx;
+				color: $font-color-light;
+				height: 50rpx;
+				line-height: 50rpx;
+
+				font-size: 26rpx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #999999;
+			}
+
+			.price {
+				// height: 50rpx;
+				// line-height: 50rpx;
+				padding-top: 20rpx;
+				font-size: 34rpx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #FF4C4C;
+			}
+
+			.step {
+				margin-top: 20rpx;
+			}
+
+			.title {
+				font-size: 34rpx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #333333;
+			}
+		}
+
+		.del-btn {
+			padding: 4rpx 10rpx;
+			font-size: 34rpx;
+			height: 50rpx;
+			color: $font-color-light;
+		}
+	}
+
+	/* 底部栏 */
+	.action-section {
+		/* #ifdef H5 */
+		margin-bottom: 0px;
+		/* #endif */
+		position: fixed;
+		left: 0rpx;
+		bottom: 0rpx;
+		z-index: 95;
+		display: flex;
+		align-items: center;
+		width: 750rpx;
+		height: 100rpx;
+		padding: 0 30rpx;
+		// background: rgba(255, 255, 255, 0.9);
+		background: #fff;
+
+		// box-shadow: 0 0 20rpx 0 rgba(0, 0, 0, 0.5);
+		// border-radius: 16rpx;
+		.checkbox {
+			height: 52rpx;
+			position: relative;
+
+			.icon-checked-box {
+				border-radius: 50rpx;
+				background-color: #ffffff;
+				width: 52rpx;
+				height: 100%;
+				position: relative;
+				z-index: 5;
+				font-size: 53rpx;
+				line-height: 1;
+				color: $font-color-light;
+
+				&::after {
+					content: '全选';
+					width: 100rpx;
+					position: absolute;
+					top: 0;
+					bottom: 0;
+					left: 52rpx;
+					margin: auto;
+					line-height: 1.5;
+					padding-left: 10rpx;
+					font-size: 32rpx;
+					font-family: PingFang SC;
+					font-weight: bold;
+					color: #767477;
+				}
+			}
+
+			.icon-checked {
+				color: $base-color;
+			}
+		}
+
+		.clear-btn {
+			position: absolute;
+			left: 26rpx;
+			top: 0;
+			z-index: 4;
+			width: 0;
+			height: 52rpx;
+			line-height: 52rpx;
+			padding-left: 38rpx;
+			font-size: $font-base;
+			color: #fff;
+			background: $font-color-disabled;
+			border-radius: 0 50px 50px 0;
+			opacity: 0;
+			transition: 0.2s;
+
+			&.show {
+				opacity: 1;
+				width: 120rpx;
+			}
+		}
+
+		.total-box {
+			flex: 1;
+			display: flex;
+			flex-direction: column;
+			text-align: right;
+			padding-right: 40rpx;
+			color: #FF6F0F;
+			font-weight: bold;
+
+			.price {
+				font-size: 32rpx;
+
+				// font-size: $font-lg;
+				// color: $font-color-dark;
+
+			}
+
+			.coupon {
+				font-size: $font-sm;
+
+				// color: $font-color-light;
+				text {
+					font-weight: bold;
+					color: $font-color-dark;
+				}
+			}
+		}
+
+		.confirm-btn {
+			padding: 0 38rpx;
+			margin: 0;
+			border-radius: 100px;
+			height: 76rpx;
+			line-height: 76rpx;
+			font-size: $font-base + 2rpx;
+			background: $base-color;
+			font-weight: bold;
+		}
+	}
+
+	/* 复选框选中状态 */
+	.action-section .checkbox.checked,
+	.cart-item .checkbox.checked {
+		color: $base-color;
+	}
+
+	.cart-hand {
+		width: 750rpx;
+		height: 88rpx;
+		background: #FFFFFF;
+		font-size: 30rpx;
+		font-family: PingFang SC;
+		font-weight: bold;
+		color: #333333;
+		line-height: 88rpx;
+		padding-left: 28rpx;
+		padding-right: 26rpx;
+		position: sticky;
+		top: 0rpx;
+		z-index: 99;
+
+		.hand-tit {
+			text {
+				color: #FF4C4C;
+			}
+
+		}
+
+		.hand-btn {
+			width: 164rpx;
+			height: 62rpx;
+			border: 2rpx solid #FF4C4C;
+			border-radius: 31rpx;
+			font-size: 26rpx;
+			font-family: PingFang SC;
+			font-weight: bold;
+			color: #FF4C4C;
+			line-height: 62rpx;
+			text-align: center;
+		}
+	}
+
+	.btm-btn {
+		z-index: 95;
+		display: flex;
+		position: fixed;
+		bottom: 0;
+		text-align: center;
+		font-size: 32rpx;
+		font-family: PingFang SC;
+		font-weight: bold;
+		color: #FFFFFF;
+		line-height: 97rpx;
+		width: 750rpx;
+
+		.btn-item {
+			height: 100%;
+			width: 50%;
+			background-color: #31332d;
+		}
+
+		.btn-item1 {
+			background-color: #5DBC7C;
+		}
+	}
+
+	.cart-list {
+		// padding-top: 88rpx;
+		padding-bottom: 97rpx;
+	}
+
+	.hx-wrapper {
+		width: 536rpx;
+		height: 630rpx;
+		position: relative;
+
+		// background-color: #fff;
+		.hx-img {
+			width: 536rpx;
+			height: 281rpx;
+
+			image {
+				width: 536rpx;
+				height: 281rpx;
+			}
+		}
+
+		.hx-close {
+			position: absolute;
+			left: 243rpx;
+			bottom: -80rpx;
+			width: 52rpx;
+			height: 52rpx;
+
+			image {
+				width: 52rpx;
+				height: 52rpx;
+			}
+		}
+
+		.hx-body {
+			width: 536rpx;
+			height: 349rpx;
+			background-color: #fff;
+			border-radius: 0 0 10rpx 10rpx;
+
+			.hx-title {
+				width: 536rpx;
+				font-size: 36rpx;
+				font-weight: 500;
+				color: #333333;
+				line-height: 1;
+				padding-top: 42rpx;
+				text-align: center;
+			}
+
+			input {
+				width: 439rpx;
+				height: 68rpx;
+				background: #DBF3E9;
+				border-radius: 10rpx;
+				margin: 39rpx auto 0;
+				padding-left: 26rpx;
+
+				.hx-placeholder {
+					font-size: 26rpx;
+					font-weight: 500;
+					color: #52C696;
+				}
+			}
+
+			.hx-btn {
+				margin: 44rpx auto 0;
+				width: 353rpx;
+				height: 71rpx;
+				background: #52C696;
+				border-radius: 34rpx;
+				font-size: 36rpx;
+				font-weight: 500;
+				color: #F8F9F9;
+				line-height: 71rpx;
+				text-align: center;
+			}
+
+
+		}
+	}
+</style>

+ 378 - 0
pages/category/category.vue

@@ -0,0 +1,378 @@
+<template>
+	<view class="content">
+		<view
+			class="dddd"
+			style="height: 10rpx"></view>
+		<view
+			class="flex cate-wrap"
+			:style="{ height: height }">
+			<scroll-view
+				scroll-y="true"
+				class="left-wrap"
+				:style="{ height: height }">
+				<view
+					class="left-item"
+					v-for="(leftitem, leftindex) in flist"
+					:class="{ 'action-item': currentIndex == leftindex }"
+					@click="leftClick(leftindex)">
+					{{ leftitem.cate_name }}
+				</view>
+			</scroll-view>
+			<scroll-view
+				scroll-y="true"
+				class="right-wrap"
+				:style="{ height: height }"
+				@scrolltolower="getProducts()">
+				<view
+					class="main"
+					v-for="gooditem in list"
+					@click="navto('/pages/product/product?id=' + gooditem.id)">
+					<view class="img">
+						<image
+							:src="gooditem.image"
+							mode=""></image>
+					</view>
+					<view class="main1">
+						<view
+							class="wenzi"
+							@click="navToList(item.id, titem.id)">
+							<text style="margin-bottom: 5rpx">{{
+								gooditem.store_name
+							}}</text>
+						</view>
+						<view class="wenzi2">
+							<view class="">
+								<text>¥{{ gooditem.price }}</text>
+							</view>
+							<view class="image">
+								<image
+									src="../../static/icon/cart (2).png"
+									style="width: 44rpx; height: 44rpx"
+									mode=""></image>
+							</view>
+						</view>
+					</view>
+				</view>
+			</scroll-view>
+		</view>
+	</view>
+</template>
+<script>
+	import { getProducts } from "@/api/product.js";
+	import { getList } from "@/api/category.js";
+	export default {
+		data() {
+			return {
+				sizeCalcState: false,
+				tabScrollTop: 0,
+				currentId: 9,
+				flist: [],
+				height: "",
+				currentIndex: 0,
+				list: [],
+				page: 1,
+				limit: 20,
+				loadingType: "more",
+				loaded: false,
+			};
+		},
+		onLoad() {
+			this.loadData();
+		},
+		// 监听导航栏输入框点击事件
+		onNavigationBarSearchInputClicked(e) {
+			uni.navigateTo({
+				url: "/pages/product/search",
+			});
+		},
+		onReady(res) {
+			var _this = this;
+			uni.getSystemInfo({
+				success: resu => {
+					const query = uni.createSelectorQuery();
+					query.select(".cate-wrap").boundingClientRect();
+					query.exec(function (res) {
+						_this.height = resu.windowHeight - res[0].top + "px";
+						console.log("打印页面的剩余高度", _this.height);
+					});
+				},
+				fail: res => {},
+			});
+		},
+		methods: {
+			leftClick(index) {
+				this.currentIndex = index;
+				this.getProducts("reload");
+			},
+			getProducts(type) {
+				let index = this.flist[this.currentIndex].id;
+				if (type == "reload") {
+					this.list = [];
+					this.page = 1;
+					this.loadingType = "more";
+					this.loaded = false;
+				}
+				if (
+					this.loadingType == "loading" ||
+					this.loadingType == "noMore"
+				) {
+					return;
+				}
+				this.loadingType = "loading";
+				getProducts({
+					cid: index,
+				}).then(res => {
+					this.list = this.list.concat(res.data);
+					if (this.limit == res.data.length) {
+						this.loadingType = "more";
+					} else {
+						this.loadingType = "noMore";
+					}
+					this.loaded = true;
+				});
+			},
+			// 载入数据
+			async loadData() {
+				let obj = this;
+				getList({})
+					.then(({ data }) => {
+						obj.flist = data.map(function (s) {
+							return s;
+						});
+						obj.getProducts();
+					})
+					.catch(err => {
+						console.log(err);
+					});
+			},
+			//一级分类点击
+			tabtap(item) {
+				console.log(item);
+				// 判断有没有初始化页面高度对象数据
+				if (!this.sizeCalcState) {
+					this.calcSize();
+				}
+				// 获取当前点击的id
+				this.currentId = item.id;
+				console.log(item.top);
+				this.tabScrollTop = item.top;
+				console.log(this.tabScrollTop);
+			},
+			//右侧栏滚动
+			asideScroll(e) {
+				// 判断有没有初始化页面高度对象数据
+				if (!this.sizeCalcState) {
+					this.calcSize();
+				}
+				let scrollTop = e.detail.scrollTop;
+				let box = 0; //列表包裹框高度初始化
+				let bottom = 10; //距离页面底部多少像素左侧列表切换到最后一个一级分类
+				// 查询当前页面对象
+				let view = uni.createSelectorQuery().select(".content");
+				view.fields(
+					{
+						id: true,
+						dataset: true,
+						rect: true,
+						size: true,
+						scrollOffset: true,
+					},
+					function (e) {
+						// 保存包裹框高度
+						box = e.height;
+					}
+				).exec();
+				// 获取所有距离顶部大于滚轮距离页面高度的所有分类
+				let tabs = this.flist
+					.filter(item => item.top - 10 <= scrollTop)
+					.reverse();
+				if (tabs.length > 0) {
+					// 判断是否已经到达滚轮底部
+					if (box + scrollTop + bottom >= e.detail.scrollHeight) {
+						this.currentId = this.flist[this.flist.length - 1].id;
+					} else {
+						this.currentId = tabs[0].id;
+					}
+				}
+			},
+			//计算右侧栏每个tab的高度等信息
+			calcSize() {
+				let h = 0;
+				this.flist.forEach(item => {
+					let view = uni
+						.createSelectorQuery()
+						.select("#main-" + item.id);
+					view.fields(
+						{
+							size: true,
+						},
+						data => {
+							item.top = h;
+							h += data.height;
+							item.bottom = h;
+						}
+					).exec();
+				});
+				this.sizeCalcState = true;
+			},
+			navToList(sid, tid) {
+				// 点击导航跳转到详细页面
+				uni.navigateTo({
+					url:
+						"/pages/product/list?fid=" +
+						this.currentId +
+						"&sid=" +
+						sid +
+						"&tid=" +
+						tid,
+				});
+			},
+			navto(url) {
+				uni.navigateTo({
+					url,
+				});
+			},
+		},
+	};
+</script>
+<style lang="scss">
+	.cate-wrap {
+		width: 750rpx;
+		.left-wrap {
+			width: 180rpx;
+			flex-shrink: 0;
+			background-color: #f2f2f2;
+			.left-item {
+				width: 180rpx;
+				height: 100rpx;
+				line-height: 100rpx;
+				font-size: 28rpx;
+				font-weight: 500;
+				color: #666666;
+				text-align: center;
+			}
+			.action-item {
+				background-color: #fff;
+				font-weight: bold;
+				position: relative;
+				&::before {
+					content: "";
+					position: absolute;
+					top: 0;
+					left: 0;
+					width: 3rpx;
+					height: 100rpx;
+					background: #ff7144;
+				}
+			}
+		}
+		.right-wrap {
+			flex-wrap: 1;
+			background-color: #fff;
+			.right-item {
+				width: 520rpx;
+				height: 240rpx;
+				padding: 30rpx 0;
+				margin: 0 auto;
+				border-bottom: 1px solid #eee;
+				display: flex;
+				justify-content: flex-start;
+				align-items: center;
+				.good-img {
+					width: 180rpx;
+					height: 180rpx;
+					border-radius: 20rpx;
+				}
+				.good-info {
+					flex-direction: column;
+					justify-content: space-between;
+					align-items: flex-start;
+					height: 100%;
+					padding-left: 25rpx;
+					.good-name {
+						font-size: 30rpx;
+						font-weight: bold;
+						color: #333333;
+					}
+					.good-price {
+						font-size: 34rpx;
+						font-weight: bold;
+						color: #ff4c4c;
+					}
+				}
+			}
+			.right {
+				display: flex;
+				justify-content: flex-end;
+				align-items: center;
+				margin-left: 25rpx;
+			}
+			.image {
+				margin-left: 30rpx;
+			}
+		}
+
+		// 右侧商品样式重构
+		.main {
+			display: flex;
+			// align-items: center;
+			width: 750rpx;
+			// height: 100vh;
+			overflow: hidden;
+			background-color: #fff;
+		}
+		.img image {
+			// margin-right: 10rpx;
+			margin-top: 15rpx;
+			margin-left: 20rpx;
+			width: 180rpx;
+			height: 180rpx;
+			object-fit: cover;
+		}
+		.main1 {
+			display: flex;
+			width: 320rpx;
+			padding-left: 20rpx;
+			box-sizing: border-box;
+			flex-direction: column;
+			justify-content: space-around;
+			background-color: #fff;
+
+			.wenzi {
+				width: 269rpx;
+				height: 29rpx;
+				font-size: 30rpx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #333333;
+				display: inline;
+				line-height: 35rpx;
+				.wenzi1 {
+					width: 181rpx;
+					height: 25rpx;
+					font-size: 26rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #666;
+					display: inline;
+				}
+			}
+
+			.wenzi2 {
+				width: 100%;
+				height: 26rpx;
+				font-size: 34rpx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #ff4c4c;
+				line-height: 35rpx;
+				display: flex;
+				justify-content: space-between;
+			}
+		}
+
+		.main1 .wenzi text {
+			margin-bottom: 20rpx;
+		}
+	}
+</style>

+ 167 - 0
pages/contract/agreement.vue

@@ -0,0 +1,167 @@
+<template>
+	<view class="box">
+		<view class="title pt20 pb30">满园春商城用户/会员注册协议</view>
+		<view class="content">欢迎您访问并使用满园春商城服务平台!本协议是您与满园春商城平台所有者就满园春商城平台服务的相关事宜所订立的协议。</view>
+		<view class="content">
+			为维护您自身权益,请您仔细阅读本协议,您点击“同意并继续”按钮后,本协议即构成对双方具有约束力的法律文件; 阅读本协议过程中,
+			如您不同意本协议或其中任何条款的约定,您应立即停止注册程序。
+		</view>
+		<view class="title">一、定义</view>
+		<view class="content">1.1 、满园春商城平台:指由浙江龍信贸易有限公司运营的网络交易平台, 包括公众号,小程序,域名为www.tzlxsc.com的网站及App。</view>
+		<view class="content">1.2 、满园春商城平台用户:指满园春商城平台各项服务的使用者。</view>
+		<view class="content">1.3 、满园春商城平台会员:指与满园春商城平台签订《满园春商城平台服务协议》并完成注册流程的用户。</view>
+		<view class="content">1.4 、满园春商城平台供应商: 指通过满园春商城平台发布货物信息或/并通过该平台销售货物的会员。</view>
+		<view class="content">1.5 、满园春商城平台采购商: 指通过满园春商城平台发布采购货物信息或/并通过该平台采购货物的会员。</view>
+		<view class="content">1.6 、满园春商城平台托运方: 指通过满园春商城平台发布发货信息或/并通过该平台委托承运商运输货物的会员。</view>
+		<view class="content">1.7 、满园春商城平台承运商: 指通过满园春商城平台发布车辆信息或/并通过该平台接受托运方的委托,提供运输服务的会员。</view>
+		<view class="title">二、账户注册、注册信息的保管与使用</view>
+		<view class="content">2.1 、注册者资格</view>
+		<view class="content">
+			您确认,在您开始注册程序使用满园春商城平台服务前,您是具备中华人民共和国法律规定的完全民事权利能力和完全民事行为能力的自然人、法人或其他组织。
+			若您不具备前述主体资格,则您及您的监护人应当承担因此而导致的一切后果。
+		</view>
+		<view class="content">2.2 、账户说明</view>
+		<view class="content">2.2.1 当您按照注册页面提示填写信息、阅读并同意本协议且完成会员注册程序后,您才能成为满园春商城平台的会员。</view>
+		<view class="content">
+			2.2.2
+			您确认,您所填写/提供的注册资料是真实、准确、完整、合法有效的,且您保证本平台可以通过该等信息与您本人进行联系。如您的注册信息有变更,请及时予以更新。如您提供的注册资料不合法、不真实、不准确、不详尽,因此而引起的责任、后果将全部由您承担。
+		</view>
+		<view class="content">2.3 注册信息的保管与使用</view>
+		<view class="content">
+			2.3.1 您提供的注册信息,满园春商城平台(以下也简称为“本平台”)将按照中华人民共和国法律、
+			法规的相关规定,采取技术和制度等手段为您妥善保管。除非得到您的授权或者按照法律及其程序要求进行透露外,本平台将保证您的信息安全。
+		</view>
+		<view class="content">
+			2.3.2
+			本平台承诺仅根据本平台的服务目的使用您的信息。服务目的包括但不限于交易确认、客户回访、政策更新、发送促销信息等,除此之外,本平台将对您的信息保密。如您认为本平台超越了正常服务范围使用了您的信息,请您立即与本平台的客服中心联系,本平台将立即予以核实、纠正。
+		</view>
+		<view class="content">
+			2.3.3
+			在您注册成功后,将产生用户名和密码等账户信息,您的账户信息由您保管,您可以根据本平台的规定改变您的密码等账户信息。本平台任何时候均不会主动要求您提供您的账户。因此,
+			请您务必保管好您的账户,谨慎合理的使用您的用户名和密码。如果因为您主动泄露、
+			遭受他人攻击、诈骗或因管理不善造成账户(包括但不限于注册账户和密码、支付账户和密码等)被复制、盗用及其他行为而导致的损失及后果,均由您自行承担。
+		</view>
+		<view class="content">2.3.4 您不得将在本平台注册获得的账户转让或借给他人使用,否则,由此产生的全部责任均由您承担。</view>
+		<view class="content">
+			2.3.5 除本平台存在过错外,您应对您账户下的所有行为后果(包括但不限于在线签署各类协议、发布信息、出售或购买商品、提供或接受物流运输服务、披露信息等)负责。
+		</view>
+		<view class="title">三、满园春商城平台的权利和义务</view>
+		<view class="content">
+			3.1 满园春商城平台有义务在现有技术上维护整满园春商城平台网站的正常运行,保障交易数据 的安全、可靠,按约定的服务内容和标准向您提供服务,并保证努力提升和改进技术。
+		</view>
+		<view class="content">3.2 若您在本平台做出下列行为的,本平台有权做出相应的处理,并且无须事先通知您 或取得您的同意:</view>
+		<view class="content">
+			3.2.1 本平台有权审阅或审查您的注册资料、信息发布、采购交易、物流服务行为,若 发现存在任何问题或疑问,本平台均有权向您发出询问及要求改正的通知或者直接作出删除
+			信息、冻结或关闭账户、取消订单等处理;
+		</view>
+		<view class="content">
+			3.2.2 若您存在以下行为或违反本协议其他约定或违反国家法律、法规、地方规章的行 为时,
+			本平台有权删除信息、禁止您发言、限制您出售或订购、限制提供或接受物流运输服务、注销您的账户,并且有权按照相关法律规定移交有关司法、行政机关处理:
+		</view>
+		<view class="content">
+			①发布或以电子邮件或以其他方式传送存在欺诈、虚假等恶意内容的信息或侵犯公共利 益、可能严重损害满园春商城平台利益、侵犯其他用户合法利益及他人人身财产权利内容的信息;
+		</view>
+		<view class="content">②进行与网上购物无关或不是以购物为目的或与提供或接受物流运输服务无关,试图扰乱正常购物、物流秩序;</view>
+		<view class="content">③干扰或破坏满园春商城平台或与满园春商城平台相连的服务器和网络。</view>
+		<view class="content">
+			3.4 若您在满园春商城平台上的采购交易、物流服务与其他用户发生纠纷或诉讼的,用户通过司法机关或行政机关依照法定程序要求满园春商城平台提供相关数据,
+			满园春商城平台应积极配合并提供有关资料。
+		</view>
+		<view class="title">四、会员的权利和义务</view>
+		<view class="content">
+			4.1
+			会员有权根据本协议的约定,以及满园春商城平台网站上发布的相关规则在满园春商城平台上查询商品信息、订购具体商品、查询物流信息、提供或接受物流服务、发表使用体验、参与商品讨论、
+			物流体验、 参加满园春商城平台网站的有关活动,以及使用满园春商城平台提供的其他服务。
+		</view>
+		<view class="content">4.2 会员应当保证在出售/购买商品提供/接受物流运输服务过程中遵守诚实信用原则,不扰乱网上交易的正常秩序。</view>
+		<view class="content">4.3 会员同意严格遵守以下义务:</view>
+		<view class="content">
+			①不得传输或发表: 煽动抗拒、 破坏宪法和法律、 行政法规实施的言论,煽动颠覆国家政权,推翻社会主义制度的言论,煽动分裂国家、破坏国家统一的言论,煽动民族仇恨、民
+			族歧视、破坏民族团结的言论;
+		</view>
+		<view class="content">②不得利用满园春商城平台从事洗钱、窃取商业秘密、窃取个人信息等违法犯罪活动;</view>
+		<view class="content">③不得捏造或者歪曲事实,散步谣言,扰乱社会秩序;</view>
+		<view class="content">④不得传输或发表任何封建迷信、邪教、淫秽、色情、赌博、暴力、恐怖、教唆犯罪等 不文明的信息资料;</view>
+		<view class="content">⑤不得公然侮辱他人或者捏造事实诽谤他人或者进行其他恶意共计;</view>
+		<view class="content">⑥其他违反宪法和法律、行政法规规定的。</view>
+		<view class="content">4.4 未经满园春商城平台书面同意,会员不得在满园春商城平台网站上发布任何形式的广告。</view>
+		<view class="content">4.5 遵守满园春商城平台制定的规则。</view>
+		<view class="title">五、责任限制</view>
+		<view class="content">
+			5.1
+			满园春商城平台仅限在“按现状”和“按现有”的基础上向用户提供满园春商城平台服务。但无法对由于信息网络设备维护、连接故障、电脑、通讯或其他系统的故障,罢工,暴乱、骚乱,灾难性天气(如火灾、洪水、风暴等),爆炸,战争、政府行为,司法行政机关的命令或因第三方原因而造成的损害结果承担责任。
+		</view>
+		<view class="content">
+			5.2 在法律法规所允许的限度内,因使用满园春商城平台服务而引起的任何损害或经济损失,
+			满园春商城平台承担的全部责任均不超过就用户出售/购买的与该索赔有关的商品、提供/接受的物流运输服务等所实际获得的直接收益。
+		</view>
+		<view class="title">六、知识产权</view>
+		<view class="content">
+			6.1 满园春商城平台网站上所刊登的资料信息(如文字、图标、标识、按钮图标、图像、数据 编辑和软件)均是满园春商城平台运营方及其关联方的财产,受中国和国际知识产权法的保护。
+		</view>
+		<view class="content">
+			6.2 除法律另有强制性规定外,未经满园春商城平台运营方明确的特别书面许可,任何单位 或个人均不得以任何方式非法地全部或部分复制、转载、引用或用作其他用途。
+		</view>
+		<view class="content">6.3 会员在满园春商城平台上发表的文章、言论仅代表其本人的观点,与满园春商城平台无关,因此所产生的责任由作者本人承担。</view>
+		<view class="content">七、协议的变更</view>
+		<view class="content">
+			满园春商城可根据国家法律法规变化及维护交易秩序、保护消费者权益需要,不时修改本协议、补充协议,变更后的协议、补充协议(下称“变更事项”)将通过法定程序并以本协议约定的方式通知您。
+		</view>
+		<view class="content">如您不同意变更事项,您有权于变更事项确定的生效日前联系满园春商城客服反馈意见。如反馈意见得以采纳,满园春商城将酌情调整变更事项。</view>
+		<view class="content">
+			如您对已生效的变更事项仍不同意的,
+			您应当于变更事项确定的生效之日起停止使用满园春商城平台服务,变更事项对您不产生效力;如您在变更事项生效后仍继续使用满园春商城平台服务,则视为您同意已生效的变更事项。
+		</view>
+		<view class="title">八、通知</view>
+		<view class="content">您同意满园春商城以以下合理的方式向您送达各类通知:</view>
+		<view class="content">(一)公示的文案;</view>
+		<view class="content">(二)站内信、客户端推送的消息;</view>
+		<view class="content">(三)根据您预留于满园春商城平台的联系方式发出的电子邮件、短信、函件等。</view>
+		<view class="title">九、协议终止</view>
+		<view class="content">
+			9.1
+			会员有权向满园春商城平台提出注销账户的申请,经满园春商城平台运营方审核同意后,由满园春商城平台注销该申请注销的账户,则本协议即告终止。账户注销后,满园春商城平台没有义务为申请注销者保留或披露账户中的任何信息。
+		</view>
+		<view class="content">9.2 出现下列情况时,满园春商城平台可以通过注销您的账户的方式单方解除本协议:</view>
+		<view class="content">①您违反本协议约定,满园春商城平台运营者依据违约条款终止本协议的;</view>
+		<view class="content">②您盗用他人账户、发布违禁信息、 骗取他人财物、销售假冒伪劣产品、扰乱市场秩序、 采取不正当手段牟利等行为,满园春商城平台对您的账户予以查封的;</view>
+		<view class="content">③除上述情形外,因您多次违反满园春商城平台的相关规定且情节严重,满园春商城平台对您的账户予以查封的;</view>
+		<view class="content">④满园春商城平台认为需要终止本协议的其他情况。</view>
+		<view class="content">9.3 本协议终止后,满园春商城平台仍享有下列权利:</view>
+		<view class="content">①继续保存您的注册信息及您使用满园春商城平台服务期间的所有交易信息;</view>
+		<view class="content">②您在满园春商城平台服务期间存在违法行为或违反本协议的行为的,满园春商城平台运营者仍有追究您责任的权利。</view>
+		<view class="title">十、法律适用、争议解决及其他</view>
+		<view class="content">
+			10.1 法律适用:本协议的订立、执行、解释、修订、补充及争议均适用中华人民共和 国法律(不包括香港、澳门、台湾地区)。如法律无相关规定的,参照商业惯例及/或行业惯 例。
+		</view>
+		<view class="content">
+			10.2 争议解决:本协议履行过程中若发生争议,由满园春商城平台与您友好协商解决。协商 不成时,任何一方均可向满园春商城平台所有者住所地人民法院(即浙江省台州市椒江区人民法院)提
+			起诉讼。
+		</view>
+		<view class="content">10.3 本协议内容中以黑体、加粗等方式显著标识的条款,请您着重阅读。</view>
+		<view class="title">十一、协议的修改</view>
+		<view class="content">
+			11.1
+			满园春商城有权随时修改本协议的任何条款,一旦本协议的内容发生变动,满园春商城将会直接在满园春商城站上公布修改之后的协议内容,该公布行为视为满园春商城已经通知用户修改内容。满园春商城也可通过其他适当方式向用户提示修改内容。
+		</view>
+		<view class="content pb30">11.2	如果不同意满园春商城对本协议相关条款所做的修改,\用户有权停止使用网络服务。如果用户继续使用网络服务,则视为用户接受满园春商城对本协议相关条款所做的修改。</view>
+	</view>
+</template>
+
+<script></script>
+
+<style>
+	.box{
+		padding: 30rpx;
+	}
+.title {
+	font-size: 32rpx;
+	font-weight: 700;
+	line-height: 2;
+}
+.content {
+	font-size: 28rpx;
+	color: #666;
+	line-height: 2;
+}
+</style>

+ 252 - 0
pages/contract/privacy.vue

@@ -0,0 +1,252 @@
+<template>
+	<view class="box">
+		<view class="title">“满园春线上商城”隐私政策</view>
+		  <view class="pb10">公司名称:浙江满园春日用品销售有限公司</view>
+		  <view class="pb10">注册地址:浙江省台州市纬一路69号1幢西边第一间2楼
+</view>
+		  <view class="pb10">办公地址:浙江省台州市纬一路69号1幢西边第一间2楼
+</view>
+		  <view class="pb10">联系电话:15068611048
+</view>
+		  <view class="pb10">更新时间:2021年09月27日</view>
+		  <view class="pb10">生效时间:2021年09月27日</view>
+		<view class="title">提示条款</view>
+		<view class="content">
+			“满园春商城”及其关联公司(以下简称“我们”)深知个人信息对您的重要性,并会尽力保护您的个人信息安全可靠,我们致力于维持您对我们的信任,恪守以下原则,保护您的个人信息:权责一致原则,目的明确原则,选择同意原则,最少够用原则,确保安全原则,主体参与原则,公开透明原则等等。同时我们承诺,我们将按业界成熟的安全解决方案,采取相应的安全保护措施来保护您的个人信息。鉴此,我们制定本《隐私政策》(下称“本政策
+			/本隐私政策”)并提醒您:
+		</view>
+		<view class="content">
+			本政策适用于“满园春商城”产品或服务。如我们关联公司的产品或服务中使用了“满园春商城”提供的产品或服务(例如直接使用“满园春商城”账户登录)但未设独立隐私政策的,则本政策同样适用于该部分产品或服务。
+			需要特别说明的是,本政策不适用于其他第三方向您提供的服务,也不适用于“满园春商城”中已另行独立设置隐私政策的产品或服务。
+		</view>
+		<view class="content">
+			在使用“满园春商城”各项产品或服务前,请您务必仔细阅读并透彻理解本政策,在确认充分理解并同意后使用相关产品或服务。一旦您开始使用“满园春商城”各项产品或服务,即表示您已充分理解并同意本政策。如对本政策内容有任何疑问、意见或建议,您可通过“满园春商城”提供的各种联系方式与我们联系。
+		</view>
+		<view class="title">本隐私政策部分将帮助您了解以下内容:</view>
+		<view class="content">1、我们如何收集和使用您的个人信息</view>
+		<view class="content">2、我们如何使用 Cookie 和同类技术</view>
+		<view class="content">3、我们如何共享、转让、公开披露您的个人信息</view>
+		<view class="content">4、我们如何保护您的个人信息</view>
+		<view class="content">5、您如何管理您的个人信息</view>
+		<view class="content">6、我们如何处理未成年人的个人信息</view>
+		<view class="content">7、您的个人信息如何在全球范围转移</view>
+		<view class="content">8、本隐私政策如何更新</view>
+		<view class="content">9、如何联系我们</view>
+		<view class="title">一、我们如何收集和使用您的个人信息</view>
+		<view class="content">
+			个人信息是指以电子或者其他方式记录的能够单独或者与其他信息结合识别特定自然人身份或者反映特定自然人活动情况的各种信息,我们会出于本政策所述的以下目的,收集和使用您的个人信息:
+		</view>
+		<view class="title">(一) 帮助您成为我们的用户</view>
+		<view class="content">为完成创建账号,以便我们为您提供服务,您需要提供以下信息:您的手机号码、头像、昵称、性别,并创建用户名和密码。</view>
+		<view class="title">(二)为您展示和推送商品或服务</view>
+		<view class="content">
+			为改善我们的产品或服务、向您提供个性化的信息搜索及交易服务,我们会根据您的浏览及搜索记录、设备信息、位置信息、交易信息,提取您的浏览、搜索偏好、行为习惯、位置信息等特征,基于特征标签进行间接人群画像并展示、推送信息。
+		</view>
+		<view class="content">如果您不想接受我们给您发送的商业广告,您可随时通过点击相应按钮取消。</view>
+		<view class="title">(三)向您提供商品或服务</view>
+		<view class="content">1、您向我们提供的信息</view>
+		<view class="content">
+			您在注册账户或使用我们的服务时,向我们提供的相关个人信息,例如电话号码、电子邮件、银行卡号或支付宝账号等;您通过我们的服务向其他方提供的共享信息,以及您使用我们的服务时所储存的信息。向“满园春商城”提供该其他方的前述个人信息之前,您需确保您已经取得其授权同意。您在使用我们的人脸识别分类服务时明确同意开启人物相册功能后向我们提供的本地相册信息。
+		</view>
+		<view class="content">2、我们在您使用服务过程中收集的信息</view>
+		<view class="content">为向您提供更契合您需求的页面展示和搜索结果、了解产品适配性、识别账号异常状态,我们会收集关于您使用</view>
+		<view class="content">的服务以及使用方式的信息并将这些信息进行关联,这些信息包括:</view>
+		<view class="content">
+			设备信息:我们会根据您在软件安装及使用中授予的具体权限,接收并记录您所使用的设备相关信息(例如设备型号、操作系统版本、设备设置、唯一设备标识符等软硬件特征信息)、设备所在位置相关信息(例如IP
+			地址、GPS位置以及能够提供相关信息的Wi-Fi
+			接入点、蓝牙和基站等传感器信息)。日志信息:当您使用我们的网站或客户端提供的产品或服务时,我们会自动收集您对我们服务的详细使用情况,作为有关网络日志保存。例如您的搜索查询内容、IP地址、浏览器的类型、电信运营商、使用的语言、访问日期和时间及您访问的网页记录等。请注意,单独的设备信息、日志信息等是无法识别特定自然人身份的信息。如果我们将这类非个人信息与其他信息结合用于识别特定自然人身份,或者将其与个人信息结合使用,则在结合使用期间,这类非个人信息将被视为个人信息,除取得您授权或法律法规另有规定外,我们会将该类个人信息做匿名化、去标识化处理。当您与我们联系时,我们可能会保存您的通信/通话记录和内容或您留下的联系方式等信息,以便与您联系或帮助您解决问题,或记录相关问题的处理方案及结果。
+		</view>
+		<view class="content">3、我们通过间接获得方式收集到的您的个人信息</view>
+		<view class="content">
+			您可通过“满园春商城”账号在我们提供的链接入口使用我们关联公司提供的产品或服务,为便于我们基于关联账号共同向您提供一站式服务并便于您统一进行管理,我们在“满园春商城”集中展示您的信息或推荐您感兴趣的信息。当您通过我们产品或服务使用上述服务时,您授权我们根据实际业务及合作需要从我们关联公司处接收、汇总、分析我们确认其来源合法或您授权同意其向我们提供的您的个人信息或交易信息。如您拒绝提供上述信息或拒绝授权,可能无法使用我们关联公司的相应产品或服务,或者无法展示相关信息,但不影响使用“满园春商城”扫人/找人、贴标签、聊天等核心服务。
+		</view>
+		<view class="title">(四)为您提供安全保障</view>
+		<view class="content">
+			为提高您使用我们及我们关联公司、合作伙伴提供服务的安全性,保护您或其他用户或公众的人身财产安全免遭侵害,更好地预防钓鱼网站、欺诈、网络漏洞、计算机病毒、网络攻击、网络侵入等安全风险,更准确地识别违反法律法规或“满园春商城”相关协议规则的情况,我们可能使用或整合您的用户信息、交易信息、设备信息、有关网络日志以及我们关联公司、合作伙伴取得您授权或依据法律共享的信息,来综合判断您账户及交易风险、进行身份验证、检测及防范安全事件,并依法采取必要的记录、审计、分析、处置措施。
+		</view>
+		<view class="title">(五)其他用途</view>
+		<view class="content">我们将信息用于本政策未载明的其他用途,或者将基于特定目的收集而来的信息用于其他目的时,会事先征求您的同意。</view>
+		<view class="title">(六)征得授权同意的例外</view>
+		<view class="content">根据相关法律法规规定,以下情形中收集您的个人信息无需征得您的授权同意:</view>
+		<view class="content">1、与国家安全、国防安全有关的;</view>
+		<view class="content">2、与公共安全、公共卫生、重大公共利益有关的;</view>
+		<view class="content">3、与犯罪侦查、起诉、审判和判决执行等有关的;</view>
+		<view class="content">4、出于维护个人信息主体或其他个人的生命、财产等重大合法权益但又很难得到您本人同意的;</view>
+		<view class="content">5、所收集的个人信息是您自行向社会公众公开的;</view>
+		<view class="content">6、从合法公开披露的信息中收集个人信息的,如合法的新闻报道、政府信息公开等渠道;</view>
+		<view class="content">7、根据您的要求签订合同所必需的;</view>
+		<view class="content">8、用于维护所提供的产品或服务的安全稳定运行所必需的,例如发现、处置产品或服务的故障;</view>
+		<view class="content">9、为合法的新闻报道所必需的;</view>
+		<view class="content">10、学术研究机构基于公共利益开展统计或学术研究所必要,且对外提供学术研究或描述的结果时,对结果中所</view>
+		<view class="content">包含的个人信息进行去标识化处理的;</view>
+		<view class="content">11、法律法规规定的其他情形。</view>
+		<view class="content">如我们停止运营“满园春商城”产品或服务,我们将及时停止继续收集您个人信息的活动,将停止运营的通知以逐</view>
+		<view class="content">一送达或公告的形式通知您,对所持有的个人信息进行删除或匿名化处理。</view>
+		<view class="title">二、我们如何使用 Cookie 和同类技术</view>
+		<view class="title">(一)Cookie</view>
+		<view class="content">
+			为确保网站正常运转、为您获得更轻松的访问体验、向您推荐您可能感兴趣的内容,我们会在您的计算机或移动设备上存储名为 Cookie 的小数据文件。Cookie
+			通常包含标识符、站点名称以及一些号码和字符。借助于Cookie,网站能够存储您的偏好等数据。
+		</view>
+		<view class="title">(二)网站信标和像素标签</view>
+		<view class="content">
+			除 Cookie
+			外,我们还会在网站上使用网站信标和像素标签等其他同类技术。例如,我们向您发送的电子邮件可能含有链接至我们网站内容的地址链接,如果您点击该链接,我们则会跟踪此次点击,帮助我们了解您的产品或
+			服务偏好以便于我们主动改善客户服务体验。网站信标通常是一种嵌入到网站或电子邮件中的透明图像。借助于电子邮件中的像素标签,我们能够获知电子邮件是否被打开。如果您不希望自己的活动以这种方式被追踪,则可以随时从我们的寄信名单中退订。
+		</view>
+		<view class="title">三、我们如何共享、转让、公开披露您的个人信息</view>
+		<view class="title">(一)共享</view>
+		<view class="content">我们不会与“满园春商城”服务提供者以外的公司、组织和个人共享您的个人信息,但以下情况除外:</view>
+		<view class="content">1、在获取明确同意的情况下共享:获得您的明确同意后,我们会与其他方共享您的个人信息。</view>
+		<view class="content">2、在法定情形下的共享:我们可能会根据法律法规规定、诉讼争议解决需要,或按行政、司法机关依法提出的要求,对外共享您的个人信息。</view>
+		<view class="content">
+			3、与关联公司间共享:为便于我们基于关联账号共同向您提供服务,推荐您可能感兴趣的信息或保护“满园春商城”关联公司或其他用户或公众的人身财产安全免遭侵害,您的个人信息可能会与我们的关联公司共享。我们只会共享必要的个人信息(如为便于您使用“满园春商城”账号使用我们关联公司产品或服务,我们会向关联公司共享您必要的账户信息),如果我们共享您的个人敏感信息或关联公司改变个人信息的使用及处理目的,将再次征求您的授权同意。
+		</view>
+		<view class="content">
+			4、与授权合作伙伴共享:仅为实现本隐私政策中声明的目的,我们的某些服务将由我们和授权合作伙伴共同提供。我们可能会与合作伙伴共享您的某些个人信息,以提供更好的客户服务和用户体验。例如安排合作伙伴提供服务。我们仅会出于合法、正当、必要、特定、明确的目的共享您的个人信息,并且只会共享提供服务所必要的个人信息。我们的合作伙伴无权将共享的个人信息用于与产品或服务无关的其他用途。
+			目前,我们的授权合作伙伴包括以下类型:
+		</view>
+		<view class="content">
+			(1)广告、分析服务类的授权合作伙伴。除非得到您的许可,否则我们不会将您的个人身份信息(指可以识别您身份的信息,例如姓名或电子邮箱,通过这些信息可以联系到您或识别您的身份)与提供广告、分析服务的合作伙伴共享。我们会向这些合作伙伴提供有关其广告覆盖面和有效性的信息,而不会提供您的个人身份信息,或者我们将这些信息进行汇总,以便它不会识别您个人。例如,只有在广告主同意遵守我们的广告发布准则后,我们才可能会告诉广告主他们广告的效果如何,或者有多少人看了他们广告或在看到广告后安装了应用,或者向这些合作伙伴提供不能识别个人身份的统计信息(例如“男性,25-29岁,位于北京”),帮助他们了解其受众或顾客。
+		</view>
+		<view class="content">
+			(2)供应商、服务提供商和其他合作伙伴。我们将信息发送给支持我们业务的供应商、服务提供商和其他合作伙伴,这些支持包括提供技术基础设施服务、分析我们服务的使用方式、衡量广告和服务的有效性、提供客户服务、支付便利或进行学术研究和调查。
+			对我们与之共享个人信息的公司、组织和个人,我们会与其签署严格的数据保护协定,要求他们按照我们的说明、本隐私政策以及其他任何相关的保密和安全措施来处理个人信息。
+		</view>
+		<view class="title">(二)转让</view>
+		<view class="content">我们不会将您的个人信息转让给任何公司、组织和个人,但以下情况除外:</view>
+		<view class="content">1、在获取明确同意的情况下转让:获得您的明确同意后,我们会向其他方转让您的个人信息;</view>
+		<view class="content">
+			2、在涉及合并、收购或破产清算情形,或其他涉及合并、收购或破产清算情形时,如涉及到个人信息转让,我们会要求新的持有您个人信息的公司、组织继续受本政策的约束,否则我们将要求该公司、组织和个人重新向您征求授权同意。
+		</view>
+		<view class="title">(三)公开披露</view>
+		<view class="content">我们仅会在以下情况下,公开披露您的个人信息:</view>
+		<view class="content">1、获得您明确同意或基于您的主动选择,我们可能会公开披露您的个人信息;</view>
+		<view class="content">
+			2、如果我们确定您出现违反法律法规或严重违反“满园春商城”相关协议规则的情况,或为保护“满园春商城”及其关联公司用户或公众的人身财产安全免遭侵害,我们可能依据法律法规或“满园春商城”相关协议规则征得您同意的情况下披露关于您的个人信息,包括相关违规行为以及“满园春商城”已对您采取的措施。
+		</view>
+		<view class="title">(四)共享、转让、公开披露个人信息时事先征得授权同意的例外</view>
+		<view class="content">以下情形中,共享、转让、公开披露您的个人信息无需事先征得您的授权同意:</view>
+		<view class="content">1、与国家安全、国防安全有关的;</view>
+		<view class="content">2、与公共安全、公共卫生、重大公共利益有关的;</view>
+		<view class="content">3、与犯罪侦查、起诉、审判和判决执行等有关的;</view>
+		<view class="content">4、出于维护您或其他个人的生命、财产等重大合法权益但又很难得到本人同意的;</view>
+		<view class="content">5、您自行向社会公众公开的个人信息;</view>
+		<view class="content">6、从合法公开披露的信息中收集个人信息的,如合法的新闻报道、政府信息公开等渠道。</view>
+		<view class="content">
+			根据法律规定,共享、转让经去标识化处理的个人信息,且确保数据接收方无法复原并重新识别个人信息主体的,不属于个人信息的对外共享、转让及公开披露行为,对此类数据的保存及处理将无需另行向您通知并征得您的同意。
+		</view>
+		<view class="title">四、我们如何保护您的个人信息安全</view>
+		<view class="content">
+			(一)我们已采取符合业界通用解决方案、合理可行的安全防护措施保护您提供的个人信息安全,防止个人信息遭到未经授权访问、公开披露、使用、修改、损坏或丢失。例如,在您的浏览器与服务器之间交换数据(如信用卡信息)时受
+			SSL(Secure Socket
+			Layer)协议加密保护;我们会使用加密技术提高个人信息的安全性;我们会使用受信赖的保护机制防止个人信息遭到恶意攻击;我们会部署访问控制机制,尽力确保只有授权人员才可访问个人信息;以及我们会举办安全和隐私保护培训课程,加强员工对于保护个人信息重要性的认识。
+		</view>
+		<view class="content">
+			(二)我们有行业先进的以数据为核心,围绕数据生命周期进行的数据安全管理体系,从组织建设、制度设计、人员管理、产品技术等方面多维度提升整个系统的安全性。
+		</view>
+		<view class="content">
+			(三)我们会采取合理可行的措施,尽力避免收集无关的个人信息。我们只会在达成本政策所述目的所需的期限内保留您的个人信息,除非需要延长保留期或受到法律的允许。
+		</view>
+		<view class="content">
+			(四)互联网并非绝对安全的环境,我们强烈建议您不要使用非“满园春商城”推荐的通信方式发送个人信息。您可以通过我们的服务建立联系和相互分享。当您通过我们的服务创建交流、交易或分享时,您可以自主选择沟通、交易或分享的对象,作为能够看到您的交易内容、联络方式、交流信息或分享内容等相关信息的第三方。
+			如您发现自己的个人信息尤其是您的账户或密码发生泄露,请您立即联络“满园春商城”用户服务的相关人员,以便我们根据您的申请采取相应措施。
+			请注意,您在使用我们服务时自愿共享甚至公开分享的信息,可能会涉及您或他人的个人信息甚至个人敏感信息,如您选择上传包含个人信息的图片。请您更加谨慎地考虑,是否在使用我们的服务时共享甚至公开分享相关信息。
+			请使用复杂密码,协助我们保证您的账号安全。我们将尽力保障您发送给我们的任何信息的安全性。 同时,我们还将按照监管部门要求,上报个人信息安全事件的处置情况。
+		</view>
+		<view class="title">五、您如何管理您的个人信息</view>
+		<view class="content">您可以通过以下方式访问及管理您的个人信息:</view>
+		<view class="content">(一)访问您的个人信息</view>
+		<view class="content">
+			您有权访问您的个人信息,法律法规规定的例外情况除外。您可以通过以下方式自行访问您的个人信息:
+			个人资料—如果您希望访问或编辑您个人资料中的昵称、头像、签名、性别等,您可以通过登录账户通过-“编辑”执行此类操作。
+			如果您无法通过上述路径访问该等个人信息,您可以加入QQ群““满园春商城”用户反馈群‘与我们取得联系。
+		</view>
+		<view class="content">(二)更正或补充您的个人信息</view>
+		<view class="content">
+			当您发现我们处理的关于您的个人信息有错误时,您有权要求我们做出更正或补充。您可以通过本条“(一)访问您的个人信息”中列明的方式提出更正或补充申请。
+		</view>
+		<view class="content">(三)删除您的个人信息</view>
+		<view class="content">您可以通过本条“(一)访问您的个人信息”中列明的方式删除您的部分个人信息。</view>
+		<view class="content">在以下情形中,您可以向我们提出删除个人信息的请求:</view>
+		<view class="content">1、如果我们处理个人信息的行为违反法律法规;</view>
+		<view class="content">2、如果我们收集、使用您的个人信息,却未征得您的明确同意;</view>
+		<view class="content">3、如果我们处理个人信息的行为严重违反了与您的约定;</view>
+		<view class="content">4、如果您不再使用我们的产品或服务;</view>
+		<view class="content">5、如果我们永久不再为您提供产品或服务。</view>
+		<view class="content">
+			若我们决定响应您的删除请求,我们还将同时尽可能通知从我们处获得您的个人信息的主体,要求其及时删除,除非法律法规另有规定,或这些主体获得您的独立授权。
+			当您从我们的服务中删除信息后,我们可能不会立即从备份系统中删除相应的信息,但会在备份更新时删除这些信息。
+		</view>
+		<view class="content">(四)改变您授权同意的范围</view>
+		<view class="content">
+			每个业务功能需要一些基本的个人信息才能得以完成(见本隐私政策“第一条”)。除此之外,对于额外个人信息的收集和使用,您可以在设置或与“满园春商城”客服联系给予或收回您的授权同意。
+			当您收回同意后,我们将不再处理相应的个人信息。但您收回同意的决定,不会影响此前基于您的授权而开展的个人信息处理。
+		</view>
+		<view class="content">(五)约束信息系统自动决策</view>
+		<view class="content">
+			在某些业务功能中,我们可能仅依据信息系统、算法等在内的非人工自动决策机制做出决定。如果这些决定显著影响您的合法权益,您有权要求我们做出解释,我们也将在不侵害“满园春商城”商业秘密或其他用户权益、社会公共利益的前提下提供申诉方法。
+		</view>
+		<view class="content">(六)响应您的上述请求</view>
+		<view class="content">
+			为保障安全,您可能需要提供书面请求,或以其他方式证明您的身份。我们可能会先要求您验证自己的身份,然后再处理您的请求。
+			我们将在30天内做出答复。如您不满意,还可以通过“满园春商城”客服发起投诉。
+			对于您合理的请求,我们原则上不收取费用,但对多次重复、超出合理限度的请求,我们将视情收取一定成本费用。对于那些无端重复、需要过多技术手段(例如,需要开发新系统或从根本上改变现行惯例)、给他人合法权益带来风险或者非常不切实际的请求,我们可能会予以拒绝。
+			在以下情形中,按照法律法规要求,我们将无法响应您的请求:
+		</view>
+		<view class="content">1、与国家安全、国防安全有关的;</view>
+		<view class="content">2、与公共安全、公共卫生、重大公共利益有关的;</view>
+		<view class="content">3、与犯罪侦查、起诉、审判和执行判决等有关的;</view>
+		<view class="content">4、有充分证据表明个人信息主体存在主观恶意或滥用权利的;</view>
+		<view class="content">5、响应您的请求将导致您或其他个人、组织的合法权益受到严重损害的;</view>
+		<view class="content">6、涉及商业秘密的。</view>
+		<view class="title">六、我们如何处理未成年人的个人信息</view>
+		<view class="content">
+			如果没有父母或监护人的同意,未成年人不得创建自己的用户账户。如您为未成年人的,建议您请您的父母或监护人仔细阅读本隐私政策,并在征得您的父母或监护人同意的前提下使用我们的服务或向我们提供信息。
+			对于经父母或监护人同意使用我们的产品或服务而收集未成年人个人信息的情况,我们只会在法律法规允许、父母或监护人明确同意或者保护未成年人所必要的情况下使用、共享、转让或披露此信息。
+		</view>
+		<view class="title">七、您的个人信息如何在全球范围转移</view>
+		<view class="content">我们在中华人民共和国境内运营中收集和产生的个人信息,存储在中国境内,以下情形除外:</view>
+		<view class="content">1、法律法规有明确规定;</view>
+		<view class="content">2、获得您的明确授权;</view>
+		<view class="content">3、您通过互联网进行跨境直播/发布动态等个人主动行为。</view>
+		<view class="content">针对以上情形,我们会确保依据本隐私政策对您的个人信息提供足够的保护。</view>
+		<view class="title">八、本隐私政策如何更新</view>
+		<view class="content">我们的隐私政策可能变更。</view>
+		<view class="content">
+			未经您明确同意,我们不会限制您按照本隐私政策所应享有的权利。对于重大变更,我们会提供显著的通知(包括我们会通过“满园春商城”公示的方式进行通知甚至向您提供弹窗提示)。
+			本政策所指的重大变更包括但不限于:
+		</view>
+		<view class="content">1、我们的服务模式发生重大变化。如处理个人信息的目的、处理的个人信息类型、个人信息的使用方式等;</view>
+		<view class="content">2、我们在控制权等方面发生重大变化。如并购重组等引起的所有者变更等;</view>
+		<view class="content">3、个人信息共享、转让或公开披露的主要对象发生变化;</view>
+		<view class="content">4、您参与个人信息处理方面的权利及其行使方式发生重大变化;</view>
+		<view class="content">5、我们负责处理个人信息安全的责任部门、联络方式及投诉渠道发生变化时;</view>
+		<view class="content">6、个人信息安全影响评估报告表明存在高风险时。</view>
+		<view class="content pb30">我们还会将本隐私政策的旧版本存档,供您查阅。</view>
+	</view>
+</template>
+
+<script>
+	export default {};
+</script>
+
+<style>
+	.box{
+		padding: 30rpx;
+	}
+.title {
+	font-size: 32rpx;
+	font-weight: 700;
+	line-height: 2;
+	
+}
+.content {
+	font-size: 28rpx;
+	color: #666;
+	line-height: 2;
+}
+.pb10{
+	font-size: 28rpx;
+}
+</style>

+ 137 - 0
pages/contract/start.vue

@@ -0,0 +1,137 @@
+<template>
+	<view class="start">
+		<view class="background"></view>
+		<view class="popup">
+			<view class="title">温馨提示</view>
+			<scroll-view :scroll-y="true" class="content">
+				<text>欢迎使用满园春线上商城。我们非常重视您的用户权益和个人信息的保护,在您使用满园春线上商城服务前,请认真阅读</text>
+				<text class="money" @click="goUser">《用户协议》</text>
+				<text>和</text>
+				<text class="money" @click="goYs">《隐私政策》</text>
+				<text>
+					全部条款。我们将通过上述协议向您说明我们如何为您提供服务并保障您的用户权益,
+					如何收集、使用、保存、共享和保护您的相关信息,以及我们为您提供的访问、更正、删除和申诉您信息相关问题的方式。
+					我们会严格按照您的授权,在上述协议约定的范围内收集、存储和使用您的注册信息、设备信息、位置信息、日志信息或其他经您授权的信息。
+					您点击“同意并继续”视为您已同意上述协议的全部内容
+				</text>
+			</scroll-view>
+			<view class="button flex">
+				<text class="disagree" @click="disagree">不同意</text>
+				<text class="agree" @click="agree">同意并继续</text>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+export default {
+	data() {
+		return {};
+	},
+	onLoad() {
+		let agree = uni.getStorageSync('agree');
+		if (agree) {
+			// this.agree()
+			uni.redirectTo({ url: '/pages/index/index' });
+		}
+	},
+	methods: {
+		//前往用户协议
+		goUser() {
+			uni.navigateTo({ url: './agreement' });
+		},
+		goYs() {
+			uni.navigateTo({ url: './privacy' });
+		},
+		//不同意
+		disagree() {
+			plus.runtime.quit();
+		},
+		//同意
+		agree() {
+			uni.setStorageSync('agree', true);
+			uni.switchTab({
+				url: '/pages/index/index',
+				success(e) {
+					console.log(e);
+				},
+				fail(e) {
+					console.log(e);
+				}
+			});
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+.money {
+	color: $base-color;
+}
+.disagree {
+	padding: 10rpx 30rpx;
+	font-size: 28rpx;
+	width: 200rpx;
+	height: 64rpx;
+	color: $base-color;
+	border-radius: 999rpx;
+	border: 2rpx solid $base-color;
+}
+.agree {
+	padding: 10rpx 30rpx;
+	width: 210rpx;
+	height: 64rpx;
+	font-size: 28rpx;
+	color: #fff;
+	background-color: $base-color;
+	border-radius: 999rpx;
+	border: 2rpx solid $base-color;
+}
+.button {
+	position: absolute;
+	left: 0;
+	right: 0;
+	bottom: 0;
+	z-index: 0;
+	display: flex;
+	padding: 24rpx;
+	justify-content: center;
+	text-align: center;
+	justify-content: space-around;
+}
+.content {
+	position: absolute;
+	left: 0;
+	right: 0;
+	top: 100rpx;
+	bottom: 120rpx;
+	z-index: 0;
+	font-size: 28rpx;
+	padding: 0 50rpx;
+	line-height: 44rpx;
+}
+.title {
+	font-size: 36rpx;
+	padding: 20rpx 50rpx;
+}
+.background {
+	position: fixed;
+	left: 0;
+	right: 0;
+	top: 0;
+	bottom: 0;
+	z-index: 0;
+	background-color: rgba(0, 0, 0, 0.4);
+}
+.popup {
+	position: absolute;
+	z-index: 0;
+	left: 50%;
+	top: 50%;
+	transform: translate3d(-50%, -50%, 0);
+	width: 600rpx;
+	height: 700rpx;
+	background-color: #fff;
+	border-radius: 30rpx;
+}
+</style>

+ 94 - 0
pages/coupon/consumer.vue

@@ -0,0 +1,94 @@
+<template>
+	<view class="content">
+		<view class="box">
+				<p class="z">{{list.stock*1}}</p>
+				<p class="c">我的资产</p>
+			<view class="left">
+				<div></div>
+				<p>*资产市值:{{list.stock*list.stock_price}}</p>
+			</view>
+		</view>
+		
+	</view>
+</template>
+<script>
+import {getUserInfo} from '@/api/user.js'
+	export default {
+		
+		data() {
+			return {
+				list: {
+					stock:0,
+					stock_price:0,
+				}
+			};
+		},
+		onShow() {
+			this.getUserInfo()
+		},
+		
+		methods: {
+			async getUserInfo() {
+				const res = await getUserInfo()
+				console.log('123', res)
+				this.list = res.data
+			
+			}
+			},
+			
+	};
+</script>
+<style lang="scss">
+.box{
+	margin-top: 162rpx;
+	margin-left: 30rpx;
+	background-image: url("../../static/img/tjr.png");
+	width: 690rpx;
+	height: 315rpx;
+	border-radius: 20rpx;
+	overflow: hidden;
+}
+.z{
+	margin-top: 99rpx;
+	margin-left: 283rpx;
+	height: 40rpx;
+	font-size: 53rpx;
+	font-family: PingFang SC;
+	font-weight: bold;
+	color: #6E4019;
+	line-height: 40rpx;
+}
+
+.c {
+	margin-top: 25rpx;
+	margin-left: 293rpx;
+	height: 25rpx;
+	font-size: 26rpx;
+	font-family: PingFang SC;
+	font-weight: 500;
+	color: #6E4019;
+	line-height: 40rpx;
+}
+
+
+
+
+div {
+	margin-top: 63rpx;
+	margin-left: 43rpx;
+    border-bottom: 1px solid #E3C5A8;
+	width: 604rpx;
+}
+
+p{
+	margin-left: 56rpx;
+	// margin-bottom: 22rpx;
+	margin-top: 16rpx;
+	height: 25rpx;
+	font-size: 26rpx;
+	font-family: PingFang SC;
+	font-weight: bold;
+	color: #6E4019;
+	line-height: 40rpx;
+}
+</style>

+ 307 - 0
pages/coupon/coupon.vue

@@ -0,0 +1,307 @@
+<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">
+				<!-- 空白页 -->
+				<empty v-if="tabItem.loaded === true && tabItem.orderList.length === 0"></empty>
+				<view v-for="(item, index) in tabItem.orderList" :key="index" class="row flex">
+					<view class="list-money flex">
+						<image :src="item._type == 2 ? '/static/img/img08.png' : '/static/img/img07.png'" mode="scaleToFill"></image>
+						<view class="list-money-text">
+							<view class="tit" :class="{ action: item._type == 2 }">
+								<text>{{ +item.coupon_price.replace(',', '') }}</text>
+							</view>
+							<view class="price">
+								<text>满{{ +item.use_min_price.replace(',', '') }}元</text>
+							</view>
+						</view>
+					</view>
+					<view class="list-interval position-relative">
+						<view class="bottom"></view>
+						<view class="top"></view>
+					</view>
+					<view class="row_list_right">
+						<view class="right_top">
+							<!-- <text class="right_name">【满减券】</text> -->
+							<text class="right_title" :class="{ action: item._type == 2 }">{{ item.coupon_title }}</text>
+						</view>
+						<view class="right_time">
+							<text>{{ item._add_time }}-{{ item._end_time }}</text>
+						</view>
+						<view class="right_use action" v-if="item._type == 2">
+							<text>{{ item._msg }}</text>
+						</view>
+						<view class="right_use noAction" v-if="item._type == 0">
+							<text>{{ item._msg }}</text>
+						</view>
+					</view>
+				</view>
+				<uni-load-more :status="tabItem.loadingType"></uni-load-more>
+			</swiper-item>
+		</swiper>
+	</view>
+</template>
+
+<script>
+import uniLoadMore from '@/components/uni-load-more/uni-load-more.vue';
+import empty from '@/components/empty';
+import { getCouponsList } from '@/api/coupon.js';
+export default {
+	components: {
+		uniLoadMore,
+		empty
+	},
+	data() {
+		return {
+			tabCurrentIndex: 0,
+			navList: [
+				{
+					state: 0,
+					text: '全部',
+					loadingType: 'more',
+					orderList: [],
+					page: 1, //当前页数
+					limit: 10 //每次信息条数
+				},
+				{
+					state: 1,
+					text: '未使用',
+					loadingType: 'more',
+					orderList: [],
+					page: 1, //当前页数
+					limit: 10 //每次信息条数
+				},
+				{
+					state: 2,
+					text: '已使用',
+					loadingType: 'more',
+					orderList: [],
+					page: 1, //当前页数
+					limit: 10 //每次信息条数
+				}
+			]
+		};
+	},
+	onLoad(options) {
+		this.loadData();
+	},
+	methods: {
+		// 返回首页
+		navTo() {
+			uni.switchTab({
+				url: '/pages/index/index'
+			});
+		},
+		//获取订单列表
+		loadData(source) {
+			//这里是将订单挂载到tab列表下
+			let index = this.tabCurrentIndex;
+			let navItem = this.navList[index];
+			let state = navItem.state;
+			if (source === 'tabChange' && navItem.loaded === true) {
+				//tab切换只有第一次需要加载数据
+				return;
+			}
+			if (navItem.loadingType === 'loading') {
+				//防止重复加载
+				return;
+			}
+			// 修改当前对象状态为加载中
+			navItem.loadingType = 'loading';
+			getCouponsList(
+				{
+					page: navItem.page,
+					limit: navItem.limit
+				},
+				index
+			)
+				.then(({ data }) => {
+					navItem.orderList = navItem.orderList.concat(data);
+					console.log(navItem.orderList);
+					navItem.page++;
+					if (navItem.limit == data.length) {
+						//判断是否还有数据, 有改为 more, 没有改为noMore
+						navItem.loadingType = 'more';
+						return;
+					} else {
+						//判断是否还有数据, 有改为 more, 没有改为noMore
+						navItem.loadingType = 'noMore';
+					}
+					uni.hideLoading();
+					this.$set(navItem, 'loaded', true);
+				})
+				.catch(e => {
+					console.log(e);
+				});
+		},
+
+		//swiper 切换
+		changeTab(e) {
+			this.tabCurrentIndex = e.target.current;
+			this.loadData('tabChange');
+		},
+		//顶部tab点击
+		tabClick(index) {
+			this.tabCurrentIndex = index;
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+// 卡卷可用时颜色
+$card-color-action: #fc4141;
+
+.swiper-box {
+	height: calc(100% - 40px);
+	.tab-content {
+		padding: 25rpx 0px;
+		font-size: 28rpx;
+		color: #1b1b1b;
+	}
+}
+.row {
+	border-radius: 15rpx;
+	margin: 0 25rpx;
+	margin-bottom: 25rpx;
+	height: 200rpx;
+	overflow: hidden;
+	background-color: #ffffff;
+	.list-interval {
+		border: 1px dashed $border-color-light;
+		height: 100%;
+		.top,
+		.bottom {
+			border-radius: 100rpx;
+			width: 30rpx;
+			height: 30rpx;
+			position: absolute;
+			background-color: $page-color-base;
+			right: -15rpx;
+		}
+		.top {
+			top: -18rpx;
+		}
+		.bottom {
+			bottom: -18rpx;
+		}
+	}
+	.list-money {
+		height: 100%;
+		image {
+			height: 100%;
+			width: 20rpx;
+		}
+		.list-money-text {
+			width: 220rpx;
+			padding: 0 25rpx;
+			text-align: center;
+			color: $font-color-light;
+			.tit {
+				padding: 15rpx 0rpx;
+				font-size: 55rpx;
+				font-weight: bold;
+				&.action {
+					color: $card-color-action;
+				}
+			}
+			.price {
+				padding-bottom: 25rpx;
+			}
+		}
+	}
+	.row_list_right {
+		flex-grow: 1;
+		padding-left: 25rpx;
+		line-height: 1;
+		.right_time {
+			color: $font-color-light;
+			font-size: $font-sm;
+		}
+		.right_use {
+			margin: 15rpx 0;
+			padding: 10rpx;
+			width: 140rpx;
+			text-align: center;
+			border-radius: 50rpx;
+			color: #fff;
+			font-size: $font-sm - 4rpx;
+			&.action {
+				background-color: $card-color-action;
+			}
+			&.noAction {
+				background-color: $color-gray;
+			}
+		}
+		.right_top {
+			margin: 15rpx 0;
+			font-size: $font-lg;
+			height: 50rpx;
+			color: $font-color-light;
+			.right_name {
+				font-weight: bold;
+			}
+			.right_title {
+				font-weight: bold;
+				&.action {
+					color: $font-color-base;
+				}
+			}
+		}
+	}
+
+	.iconlocation {
+		font-size: 36rpx;
+		color: $font-color-light;
+	}
+}
+page,
+.content {
+	background: $page-color-base;
+	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: $font-color-dark;
+		position: relative;
+		&.current {
+			color: #bc253a;
+			&:after {
+				content: '';
+				position: absolute;
+				left: 50%;
+				bottom: 0;
+				transform: translateX(-50%);
+				width: 44px;
+				height: 0;
+				border-bottom: 2px solid #bc253a;
+			}
+		}
+	}
+}
+/* load-more */
+.uni-load-more {
+	display: flex;
+	flex-direction: row;
+	height: 80rpx;
+	align-items: center;
+	justify-content: center;
+}
+</style>

+ 372 - 0
pages/coupon/details.vue

@@ -0,0 +1,372 @@
+<template>
+	<view class="content">
+		<!-- <view class="flex_item coupon">
+			<view class="coupon_img"><image src="/static/xpy/025.png"></image></view>
+			<view class="coupon_name">
+				<view class="coupon_text">星拼乐100元商城购物卡通用元商城购物卡通用</view>
+				<view class="coupon_money">¥100</view>
+			</view>
+		</view> -->
+		<view class="row-box">
+			<view class="title">付款金额</view>
+			<view class="row">
+				<text class="tit">¥</text>
+				<input class="input" type="number" v-model="money" placeholder="请输入转让金额" placeholder-class="placeholder" />
+			</view>
+			<button class="add-btn up" :class="{ 'active-bg': payLoding }" @click="!payLoding ? confirm() : ''">生成二维码</button>
+		</view>
+		<view class="coupon_transfer" v-if="showcode">
+			<view class="erwema">
+				<tki-qrcodes
+					:cid="cid"
+					ref="qrcode"
+					:val="val"
+					:size="size"
+					:unit="unit"
+					:background="background"
+					:foreground="foreground"
+					:pdground="pdground"
+					:icon="icon"
+					:iconSize="iconSize"
+					:lv="lv"
+					:onval="onval"
+					:loadMake="loadMake"
+					:usingComponents="usingComponents"
+					@result="qrR"
+				></tki-qrcodes>
+			</view>
+			<view class="upload" @click="upload()">复制二维码</view>
+			<view class="transfer">通过扫描此二维码转让购物卡</view>
+			<!-- 	<view class="transfer_image" @click="baocun(image)"><image :src="image"></image></view> -->
+		</view>
+		<!-- <view class="orderDetialBox">
+			<view class="f-header m-t">
+				<view class="f-left-ic····························on"></view>
+				<view class="tit-box"><text class="tit">卡片信息</text></view>
+			</view>
+			<view class="item flex">
+				<view class="title-left flex">
+					<text class="title">订单编号:</text>
+					<view class="text">45875487854</view>
+				</view>
+			</view>
+			<view class="item flex">
+				<view class="title-left flex">
+					<text class="title">付款时间:</text>
+					<view class="text">2018-09-09 12:00:31</view>
+				</view>
+			</view>
+			<view class="item flex">
+				<view class="title-left flex">
+					<text class="title">拼中时间:</text>
+					<view class="text">2018-09-09 12:00:31</view>
+				</view>
+			</view>
+		</view> -->
+	</view>
+</template>
+
+<script>
+import { rechargemoneys } from '@/api/wallet.js';
+import tkiQrcodes from '@/components/tki-qrcode/tki-qrcode.vue';
+import { orderDetail } from '@/api/order.js';
+export default {
+	components: { tkiQrcodes },
+	props: {
+		qrval: {
+			// 要生成的二维码值
+			type: String
+		}
+	},
+	data() {
+		return {
+			image: 'http://img03.taobaocdn.com/tfscom/TB2Drm1jVXXXXakXpXXXXXXXXXX_!!2-dgshop.png_300x300.jpg',
+			payLoding: false, //是否加载中
+			showcode: false, //显示二维码页面
+			money: '',
+			url: '',
+			uid: '',
+			qrsize: 120, // 二维码大小
+			cid: 'tki-qrcode-canvas', //canvasId,页面存在多个二维码组件时需设置不同的ID
+			size: 180, //生成的二维码大小
+			unit: 'upx', //大小单位尺寸
+			// show: true,//默认使用组件中的image标签显示二维码
+			val: '', //要生成的内容
+			background: '#ffffff', //二维码背景色
+			foreground: '#333333', //二维码前景色
+			pdground: '#333333', //二维码角标色
+			icon: '', //二维码图标URL(必须是本地图片,网络图需要先下载至本地)
+			iconSize: 40, //二维码图标大小
+			lv: 3, //容错级别
+			onval: true, //监听val值变化自动重新生成二维码
+			loadMake: false, //组件初始化完成后自动生成二维码,val需要有值
+			usingComponents: false, //是否使用了自定义组件模式(主要是为了修复非自定义组件模式时 v-if 无法生成二维码的问题)
+			showLoading: false, //是否显示loading
+			loadingText: '二维码生成中', //loading文字
+			src: '', // 二维码生成后的图片地址或base64
+			ratio: 1, //页面比例用于计算
+			ctxSrc: '', //要显示的图片
+			loading: true, //是否载入图片中
+			canHeight: '',
+			canWeidth: ''
+		};
+	},
+	onLoad() {
+		this.loadlist;
+		let value = uni.getStorageSync('userInfo');
+		this.uid = value.uid;
+	},
+	methods: {
+		// 創建二维码
+		creatQrcode() {
+			console.log(this.$refs.qrcode._makeCode);
+			this.$refs.qrcode._makeCode();
+		},
+		// 保存二维码到图库
+		saveQrcode() {
+			this.$refs.qrcode._saveCode();
+		},
+		// 生成二维码后返回base64
+		qrR(res) {
+			this.src = res;
+		},
+		//清空二维码(清空二维码会触发result回调 返回值为空)
+		clearQrcode(e) {
+			this.$refs.qrcode._clearCode();
+			this.val = '';
+		},
+		// 载入订单详细
+		loadlist() {},
+		// 提交
+		confirm() {
+			let obj = this;
+			if (!obj.money || obj.money == '') {
+				uni.showToast({
+					title: '请填写转让金额',
+					icon: 'none',
+					duration: 2000
+				});
+				return;
+			}
+			obj.showcode = true;
+			obj.payLoding = true;
+			/**rechargemoneys({
+				money: obj.money,
+			})
+				.then(e => {
+					 console.log(e.data)
+					 obj.val='{"url":"'+e.data.url+'"}';
+				})
+				.catch(e => {
+					uni.showModal({
+						title: '失败',
+						content: '转入失败',
+						content: JSON.stringify(e),
+						showCancel: false
+					});
+				});**/
+
+			obj.val = '{"money":"' + obj.money + '","id":"' + obj.uid + '"}';
+			this.$nextTick(function() {
+				this.creatQrcode();
+			});
+		},
+		upload() {
+			this.$refs.qrcode._saveCode();
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+page {
+	background: $page-color-base;
+}
+.asdf {
+	width: 110rpx;
+	height: 110rpx;
+}
+.content {
+	border-top: 2rpx solid #f2f3f5;
+}
+// 订单详细
+.orderDetialBox {
+	margin-top: 20rpx;
+	padding: 0 30rpx;
+	background-color: #ffffff;
+	font-size: $font-base;
+	color: $font-color-base;
+	.item {
+		height: 80rpx;
+		.text {
+			padding-left: 10rpx;
+		}
+		.buttom-right {
+			width: 180rpx;
+			border-radius: 99rpx;
+			padding: 10rpx;
+			text-align: center;
+			border: 1px solid $border-color-light;
+		}
+	}
+}
+
+// 标题头
+.f-header {
+	display: flex;
+	align-items: center;
+	height: 80rpx;
+	.tit-box {
+		@extend %font-title-box;
+		border-bottom: 2rpx solid #f0f0f0;
+		padding: 25rpx 0rpx;
+	}
+	.tit {
+		@extend %font-title;
+	}
+	.f-left-icon {
+		@extend %f-left-icon;
+	}
+}
+// 共有底部高度
+$btHeight: 100rpx;
+.btHeight {
+	height: $btHeight;
+}
+.coupon {
+	width: 100%;
+	background-color: #ffffff;
+	padding: 25rpx 25rpx;
+	font-size: 30rpx;
+	.coupon_img {
+		width: 200rpx;
+		height: 118rpx;
+		margin-right: 15rpx;
+		image {
+			width: 100%;
+			height: 100%;
+		}
+	}
+	.coupon_name {
+		height: 118rpx;
+		width: 70%;
+		.coupon_text {
+			padding-bottom: 25rpx;
+			white-space: nowrap;
+			overflow: hidden;
+			text-overflow: ellipsis;
+			font-weight: bold;
+			color: rgba(51, 51, 51, 1);
+		}
+		.coupon_money {
+			font-weight: 500;
+			color: rgba(102, 102, 102, 1);
+			.coupon_time {
+				padding-left: 25rpx;
+			}
+		}
+	}
+}
+.coupon_transfer {
+	background-color: #ffffff;
+	padding: 40rpx 25rpx;
+	width: 100%;
+	height: 100%;
+	margin-top: 25rpx;
+}
+.transfer_image {
+	width: 100%;
+	height: 220rpx;
+	text-align-last: center;
+}
+.transfer_image image {
+	width: 220rpx;
+	height: 220rpx;
+}
+.upload {
+	width: 28%;
+	background: linear-gradient(90deg, rgba(253, 59, 51, 1) 0%, rgba(254, 75, 52, 1) 100%);
+	border-radius: 10rpx;
+	color: #ffffff;
+	font-size: 26rpx;
+	margin: 25rpx auto;
+	padding: 20rpx 30rpx;
+	text-align: center;
+}
+.transfer {
+	width: 100%;
+	text-align: center;
+	font-size: 26rpx;
+}
+.row-box {
+	margin-top: 30rpx;
+	padding: 20rpx 30rpx;
+	background: #fff;
+	.title {
+		font-size: $font-base + 2rpx;
+		color: $font-color-dark;
+		padding-bottom: 25rpx;
+	}
+	.row {
+		display: flex;
+		align-items: center;
+		position: relative;
+		height: 80rpx;
+		.tit {
+			flex-shrink: 0;
+			width: 40rpx;
+			font-size: 30rpx;
+			color: $font-color-dark;
+		}
+		.input {
+			flex: 1;
+			font-size: 30rpx;
+			color: $font-color-dark;
+		}
+		.iconlocation {
+			font-size: 36rpx;
+			color: $font-color-light;
+		}
+
+		.buttom {
+			color: $font-color;
+			font-size: $font-base;
+		}
+	}
+}
+.add-btn {
+	&.modified {
+		color: $base-color;
+	}
+	&.up {
+		background: #5dbc7c;
+		border-radius: 40px;
+		color: #fff;
+	}
+	&.to {
+		border: 1px solid rgba(252, 42, 63, 1);
+		border-radius: 40px;
+		border-radius: 40px;
+		color: #fc2a3f;
+	}
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	width: 560rpx;
+	height: 75rpx;
+	margin: 0 auto;
+	margin-top: 25rpx;
+	font-size: $font-lg;
+	border-radius: 10rpx;
+	// box-shadow: 1px 2px 5px rgba(219, 63, 96, 0.4);
+}
+.erwema {
+	width: 135px;
+	height: 140px;
+	background-color: #ffffff;
+	display: flex;
+	justify-content: center;
+	align-items: center;
+	margin: 0rpx auto;
+}
+</style>

+ 332 - 0
pages/detail/detail.vue

@@ -0,0 +1,332 @@
+<template>
+	<view>
+		<swiper class="carousel" indicator-dots=true circular=true interval="3000" duration="700">
+			<swiper-item v-for="(item,index) in data.imgList" :key="index">
+				<view class="image-wrapper">
+					<image
+						:src="item.src" 
+						:class="item.loaded" 
+						mode="aspectFill"
+						@load="imageOnLoad('imgList', index)" 
+					></image>
+				</view>
+			</swiper-item>
+		</swiper>
+		<view class="scroll-view-wrapper">
+			<scroll-view class="episode-panel" :class="{Skeleton:!loaded}" scroll-x>
+				<view v-for="(item, index) in data.episodeList" :key="index"
+					:class="{current: currentEpd===item}"
+					@click="changeEpd(index)"
+				>
+					{{item}}
+				</view>
+			</scroll-view>
+		</view>
+		<view class="info">
+			<view class="title">
+				<text :class="{Skeleton:!loaded}">{{data.title}}</text>
+				<text :class="{Skeleton:!loaded}">{{data.title2}}</text>
+			</view>
+			<text class="yticon icon-xia"></text>
+		</view>
+		<view class="actions">
+			<text class="yticon icon-fenxiang2" @click="share"></text>
+			<text class="yticon icon-Group-"></text>
+			<text class="yticon icon-shoucang" :class="{active: data.favorite}" @click="favorite"></text>
+		</view>
+
+		<!-- 猜你喜欢 -->
+		<view class="guess">
+			<view class="section-tit">猜你喜欢</view>
+			<view class="guess-list">
+				<view 
+					v-for="(item, index) in data.guessList" :key="index"
+					class="guess-item"
+				>
+					<view class="image-wrapper">
+						<image 
+							:src="item.src" 
+							:class="item.loaded" 
+							mode="aspectFill"
+							@load="imageOnLoad('guessList', index)" 
+						></image>
+					</view>
+					<text class='title clamp' :class="{Skeleton:!loaded}">{{item.title}}</text>
+					<text class="clamp" :class="{Skeleton:!loaded}">{{item.title2}}</text>
+				</view>
+			</view>
+		</view>
+		<!-- 评论 -->
+		<view class="evalution">
+			<view class="section-tit">评论</view>
+			<view class="eva-list" :class="{Skeleton:!loaded}">
+				<view  v-for="(item, index) in data.evaList" :key="index"
+					class="eva-item"
+				>
+					<image :src="item.src" mode="aspectFill"></image>
+					<view class="eva-right">
+						<text>{{item.nickname}}</text>
+						<text>{{item.time}}</text>
+						<view class="zan-box">
+							<text>{{item.zan}}</text>
+							<text class="yticon icon-shoucang"></text>
+						</view>
+						<text class="content">{{item.content}}</text>
+					</view>
+				</view>
+			</view>
+		</view>
+		<!-- 分享 -->
+		<share 
+			ref="share" 
+			:contentHeight="580"
+			:shareList="shareList"
+		></share>
+	</view>
+</template>
+
+<script>
+	import share from '@/components/share';
+	export default {
+		components: {
+			share
+		},
+		data() {
+			return {
+				loaded: false,
+				currentEpd: 1,
+				data: {
+					guessList: [{},{},{},{}] 
+				},
+				shareList: []
+			};
+		},
+		async onLoad(){
+			let detailData = await this.$api.json('detailData');
+			let shareList = await this.$api.json('shareList');
+			this.loaded = true;
+			this.data = detailData;
+			this.shareList = shareList;
+			uni.setNavigationBarTitle({
+				title: detailData.title
+			})
+		},
+		methods:{
+			imageOnLoad(key,index){
+				this.$set(this.data[key][index], 'loaded', 'loaded');
+			},
+			changeEpd(index){
+				let list = this.data.episodeList;
+				let epd = list[index];
+				this.$api.msg(`切换到第${epd}项`);
+				this.currentEpd = epd;
+			},
+			//分享
+			share(){
+				this.$refs.share.toggleMask();	
+			},
+			//收藏
+			favorite(){
+				this.data.favorite = !this.data.favorite;
+			}
+		},
+		//处理遮罩层物理返回键
+		onBackPress(){
+			if(this.$refs.share.show){
+				this.$refs.share.toggleMask();
+				return true;
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	page{
+		background: $page-color-base;
+	}
+
+	.carousel {
+		height: 200px;
+		.image-wrapper{
+			display: flex;
+			justify-content: center;
+			align-content: center;
+			width: 100%;
+			height: 100%;
+			overflow: hidden;
+
+			image {
+				width: 100%;
+				height: 100%;
+			}
+		}
+	}
+	.scroll-view-wrapper{
+		display:flex;
+		align-items:center;
+		height: 90rpx;
+		padding: 20rpx 0 20rpx 40rpx;
+		background: #fff;
+	}
+	.episode-panel {
+		white-space: nowrap;
+		width: 100%;
+		view {
+			display: inline-block;
+			margin-right: 30rpx;
+			width: 56rpx;
+			font-size: $font-lg;
+			color: $font-color-base;
+			&.current{
+				color: #07a7a7;
+			}
+		}
+	}
+
+	.info {
+		display: flex;
+		align-items: center;
+		padding: 10rpx 40rpx;
+		background: #fff;
+
+		.title {
+			flex: 1;
+			display: flex;
+			flex-direction: column;
+			font-size: $font-lg + 4rpx;
+			color: $font-color-dark;
+
+			text:last-child {
+				font-size: $font-sm;
+				color: $font-color-light;
+				margin-top: 4rpx;
+				&.Skeleton{
+					width:220rpx;
+				}
+			}
+		} 
+		.yticon {
+			font-size: 44rpx;
+			color: $font-color-base;
+			margin: 0 10rpx 0 30rpx;
+		}
+	}
+
+	.actions {
+		padding: 10rpx 28rpx;
+		background: #fff;
+
+		.yticon {
+			font-size: 46rpx;
+			color: $font-color-base;
+			padding: 10rpx 12rpx;
+			&.active{
+				color: #ff4443;
+			}
+			&:nth-child(2) {
+				font-size: 50rpx;
+			}
+		}
+	}
+
+	.section-tit {
+		font-size: $font-base+2rpx;
+		color: $font-color-dark;
+		margin-bottom: 30rpx;
+		text-align:center;
+	}
+
+	.guess {
+		display: flex;
+		flex-direction: column;
+		justify-content: center;
+		align-items: center;
+		padding: 30rpx 40rpx 10rpx;
+		margin-top: 16rpx;
+		background: #fff;
+	}
+
+	.guess-list {
+		display: flex;
+		flex-wrap: wrap;
+		width: 100%;
+	}
+	.guess-item {
+		display: flex;
+		flex-direction: column;
+		flex: 1;
+		overflow: hidden;
+		min-width: 40%;
+		margin-right: 26rpx;
+		padding-bottom: 40rpx;
+	
+		&:nth-child(2n) {
+			margin-right: 0;
+		}
+	
+		image {
+			width: 100%;
+			height: 200rpx;
+			border-radius: 10rpx;
+		}
+	
+		text {
+			font-size: $font-sm;
+			color: $font-color-light;
+			&.Skeleton{
+				width: 180rpx;
+				&.title{
+					width: 140rpx;
+				}
+			}
+			&.title{
+				font-size: $font-base+2rpx;
+				color: $font-color-dark;
+				margin-top:16rpx;
+				margin-bottom: 8rpx;
+			}
+		}
+	}
+	.evalution{
+		display:flex;
+		flex-direction:column;
+		background: #fff;
+		margin-top: 16rpx;
+		padding: 40rpx 0;
+	}
+
+	.eva-item{
+		display:flex;
+		padding: 20rpx 40rpx;
+		image{
+			width: 60rpx;
+			height: 60rpx;
+			border-radius: 50px;
+			flex-shrink: 0;
+			margin-right: 24rpx;
+		}
+	}
+	.eva-right{
+		display:flex;
+		flex-direction:column;
+		flex: 1;
+		font-size: $font-sm + 2rpx;
+		color: $font-color-light;
+		position:relative;
+		.zan-box{
+			display:flex;
+			align-items:base-line;
+			position:absolute;
+			top: 10rpx;
+			right: 10rpx;
+			.yticon{
+				margin-left: 8rpx; 
+			}
+		}
+		.content{
+			font-size: $font-base;
+			color: #333;
+			padding-top:20rpx;
+		}
+	}
+</style>

+ 167 - 0
pages/favorites/favorites.vue

@@ -0,0 +1,167 @@
+<template>
+	<view class="container">
+		<!-- 空白页 -->
+		<empty v-if="favoriteList.length < 1"></empty>
+		<view class="favorites flex" v-for="ls in favoriteList" @click="toproduct(ls.pid)">
+			<view class="favorites_img"><image :src="ls.image"></image></view>
+			<view class="favorites_list">
+				<view class="favorites_name">{{ ls.store_name }}</view>
+				<view class="favorites_peice flex">
+					<view>
+						<text>¥{{ ls.price }}</text>
+					</view>
+					<view @click.prevent.stop="del(ls.pid)" v-show="delshow" class="icon_del">
+						<text class="iconfont icondelete"></text>
+						<text>取消</text>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+import { getcollectList, delcollect } from '@/api/favorite.js';
+import uniLoadMore from '@/components/uni-load-more/uni-load-more.vue';
+import empty from '@/components/empty';
+export default {
+	components: {
+		uniLoadMore,
+		empty
+	},
+	data() {
+		return {
+			tabCurrentIndex: 0,
+			favoriteList: '',
+			delshow: true
+		};
+	},
+	onLoad() {
+		this.loadData();
+	},
+	methods: {
+		//获取收藏夹列表
+		loadData() {
+			let obj = this;
+			getcollectList({
+				page: '1',
+				limit: '10'
+			})
+				.then(function(e) {
+					obj.favoriteList = e.data;
+					console.log(obj.favoriteList);
+				})
+				.catch(function(e) {
+					console.log(e);
+				});
+		},
+		//删除收藏夹商品
+		del(item) {
+			let obj = this;
+			uni.showModal({
+				title: '提示',
+				content: '是否取消收藏该商品',
+				success: e => {
+					if (e.confirm) {
+						delcollect({
+							id: item,
+							category: 'product'
+						})
+							.then(function(e) {
+								uni.showToast({
+									title: '已取消收藏',
+									duration: 1500,
+								});
+								obj.loadData();
+							})
+							.catch(function(e) {
+								console.log(e);
+							});
+					}
+				}
+			});
+		},
+		//跳转商品详情页
+		toproduct(item) {
+			let id = item;
+			uni.navigateTo({
+				url: `/pages/product/product?id=${id}`
+			});
+		}
+		// //跳转忘记密码
+		// forget() {
+		// 	uni.navigateTo({
+		// 		url: `/pages/public/forget`
+		// 	});
+		// },
+		// // 后退
+		// navBack() {
+		// 	uni.navigateBack();
+		// }
+	}
+};
+</script>
+
+<style lang="scss">
+page {
+	height: 100%;
+}
+%flex-center {
+	display: flex;
+	flex-direction: column;
+	justify-content: center;
+	align-items: center;
+}
+%section {
+	display: flex;
+	justify-content: space-around;
+	align-content: center;
+	background: #fff;
+	border-radius: 10rpx;
+}
+.container {
+	height: 100%;
+	background-color: $page-color-base;
+	padding: 15rpx 0rpx;
+	font-size: 28rpx;
+}
+.favorites {
+	width: 90%;
+	background-color: #ffffff;
+	// height:100%;
+	border-radius: 15rpx;
+	margin: 15rpx auto;
+	padding: 25rpx 25rpx;
+	margin-bottom: 25rpx;
+}
+.favorites_img {
+	width: 80px !important;
+	height: 80px;
+}
+.favorites_img image {
+	width: 100%;
+	height: 100%;
+}
+.favorites_list {
+	width: 70%;
+	padding-left: 20rpx;
+}
+.icon_del {
+	color: $font-color-base;
+	z-index: 9999;
+	font-weight: bold;
+}
+.favorites_name {
+	height: 80rpx;
+	overflow: hidden;
+	text-overflow: ellipsis;
+	display: -webkit-box;
+	-webkit-box-orient: vertical;
+	-webkit-line-clamp: 2;
+}
+.favorites_peice {
+	margin-top: 25rpx;
+	color: #db1935;
+	font-weight: bold;
+}
+</style>

+ 192 - 0
pages/gift/gift.vue

@@ -0,0 +1,192 @@
+<template>
+	<view class="hotgoods">
+		<view class="item" v-for="item in list" :key="item.id" @click="nav(item.id)">
+			<view class="item_left">
+				<image :src="item.image" alt="" />
+			</view>
+			<view class="item_right">
+				<div class="lienTwo">{{item.store_name}}</div>
+				<div class="item_right_bottom">
+					<p>
+						<i>¥{{item.ot_price}}</i>
+						<!-- <u-icon name="arrow-downward" class="icon"></u-icon> -->
+						<!-- <b>直降{{item.ot_price - item.price}}元</b> -->
+					</p>
+					<span>
+						<i>¥{{item.price}}</i>
+							<!-- <div class="em">
+								赠{{item.gain_award_integral}}积分
+							</div> -->
+					</span>
+				</div>
+			</view>
+		</view> 
+	</view>
+</template>
+
+<script>
+import { groom6 } from "@/api/index.js";
+import {uview} from 'uview-ui';
+export default {
+	data() {
+		return {
+			list: [],
+		};
+	},
+	onLoad() {
+		this.groom6();
+	},
+	methods: {
+		// 获取列表数据
+		async groom6() {
+			try {
+				this.res = await groom6()
+				this.list = this.res.data.list
+				// console.log('11111111', this.res)
+				console.log('11111111', this.res.data.list)
+			} catch (error) {
+				console.log(error)
+			}
+			
+		},
+		nav(id) {
+			uni.navigateTo({
+				url: "/pages/product/product?id=" + id
+			})
+		}
+	},
+};
+</script>
+<!-- Dengxia -->
+<style lang="scss">
+.extend {
+  transition: 0.2s;
+
+  &:hover {
+    transform: translateY(-2px);
+    box-shadow: 0px 10px 30px 0px rgba(0, 0, 0, 0.15);
+    cursor: pointer;
+  }
+}
+
+h3 {
+	font-weight: normal;
+}
+
+i,
+em {
+	font-style: normal;
+}
+
+b {
+	font-weight: 400;
+}
+
+.hotgoods {
+	font-family: PingFang SC;
+	width: 100vw;
+	min-height: 100vh;
+	background-color: #f7f7f7;
+	padding: 31rpx 21rpx;
+
+	.item {
+		// @extend .extend;
+		margin-bottom: 20rpx;
+		width: 100%;
+		height: 276rpx;
+		background: #ffffff;
+		box-shadow: 0rpx 0rpx 20rpx 0rpx rgba(50, 50, 52, 0.06);
+		// opacity: 0.53;
+		border-radius: 10rpx;
+		display: flex;
+		align-items: center;
+		padding: 15rpx;
+
+		// justify-content: space-between;
+		.item_left {
+			margin-right: 10px;
+
+			// margin-left: 15rpx;
+			image {
+				width: 236rpx;
+				height: 236rpx;
+			}
+		}
+
+		.item_right {
+			height: 236rpx;
+			display: flex;
+			// 奇怪
+			flex-direction: column;
+			justify-content: space-between;
+			min-width: 0;
+
+			.lienTwo {
+				word-break: break-all;
+				font-size: 16px;
+				color: #333333;
+				font-weight: bold;
+				width: 318rpx;
+				text-overflow: -o-ellipsis-lastline;
+				overflow: hidden; //溢出内容隐藏
+				text-overflow: ellipsis; //文本溢出部分用省略号表示
+				display: -webkit-box; //特别显示模式
+				-webkit-line-clamp: 2; //行数
+				line-clamp: 2;
+				-webkit-box-orient: vertical; //盒子中内容竖直排列
+			}
+
+			.item_right_bottom {
+				display: flex;
+				flex-direction: column;
+				justify-content: space-between;
+
+				p {
+					display: inline-block;
+					margin-bottom: 15rpx;
+
+					i {
+						color: #999999;
+						margin-right: 15rpx;
+						text-decoration: line-through
+					}
+						.icon{
+							color: #b59467;
+						}
+
+					b {
+						color: #B59467;
+						margin-left: 15rpx;
+					}
+				}
+
+				span {
+					// display: inline-block;
+					display: flex;
+					// justify-content: center;
+					align-items: center;
+					i {
+						color: #FF4C4C;
+						font-size: 36rpx;
+						margin-right: 10rpx;
+					}
+
+					.em {
+						display: inline-block;
+						width: 120rpx;
+						height: 37rpx;
+						background: linear-gradient(90deg, #FF834D, #FF2600);
+						border-radius: 12rpx 0rpx 12rpx 0rpx;
+						color: #FFFFFF;
+						font-weight: 500;
+						font-size: 10px;
+						text-align: center;
+						
+
+					}
+				}
+			}
+		}
+	}
+}
+</style>

+ 388 - 0
pages/groupBooking/detail.vue

@@ -0,0 +1,388 @@
+<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-countdown
+						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-countdown>
+				</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="(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 uniCountdown from '@/components/uni-countdown/uni-countdown.vue';
+import { getCombinationLisPink } from '@/api/groupBooking.js';
+import { groupGoods } from '@/api/product.js';
+import { timeComputed } from '@/utils/rocessor.js';
+import { mapState } from 'vuex';
+// 倒计时
+export default {
+	computed: {
+		// 还需要报名的人数
+		peopleNub() {
+			return  this.pinkT.people - 1 - this.people.length 
+		}
+	},
+	data() {
+		return {
+			gp_id: 0, //拼团商品id
+			goods: {}, //商品信息
+			pinkT: {}, //拼团团长信息
+			people: [], //拼团成员信息
+			people_num: 0, //总共需要多少人
+			endTime: 0, //剩余时间
+			status: 0, //判断是否为团长
+			gid: 0,
+			user_info: {}, //当前用户信息
+			// 倒计时
+			stopTime: {
+				stopTimeH: 0,
+				stopTimeM: 0,
+				stopTimeS: 0
+			},
+			pinkBool:0,//拼团状态0为待拼团 -1为拼团失败 1为拼团成功
+			userBool: 0 ,//判断用户是否已经参与拼团 0未参加 1为已参加
+			spread:'',//默认没有邀请人
+			userInfo:{}//当前用户信息
+		};
+	},
+	onLoad(e) {
+		// 保存拼团订单id
+		this.gp_id = e.id;
+		// 判断是否有人邀请
+		if (e.spread) {
+			// 存储邀请人
+			this.spread = e.spread;
+			uni.setStorageSync('spread', option.spread);
+		}
+	},
+	onShow() {
+		this.getData();
+	},
+	components: {
+		uniCountdown
+	},
+	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
+			});
+		},
+		//邀请参团
+		invitation() {
+			let obj = this;
+			// 判断拼团是否已经结束
+			if (obj.userBool == 0) {
+				uni.showModal({
+					title: '提示',
+					content: '该拼团已经结束!',
+					showCancel: false,
+					success: res => {},
+					fail: () => {},
+					complete: () => {}
+				});
+				return;
+			}
+			uni.navigateTo({
+				url: '/pages/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
+				// #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>

+ 257 - 0
pages/groupBooking/index.vue

@@ -0,0 +1,257 @@
+<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 { mapState } from 'vuex';
+import { getCombinationList } from '@/api/groupBooking.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();
+	},
+	computed: {
+		...mapState('user',['userInfo'])
+	},
+	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) {
+			// if(this.userInfo.level>0){
+				uni.navigateTo({
+					url: '/pages/product/product?type=2&id=' + e.id
+				});
+			// }else{
+				// uni.showModal({
+				// 	title: '提示',
+				// 	content: '请升级为vip用户',
+				// 	success: res => {
+				// 		if(res.confirm){
+				// 			uni.navigateTo({
+				// 				url: '/pages/product/giftBag'
+				// 			});
+				// 		}
+				// 	},
+				// 	fail: (e) => {
+				// 		console.log(e);
+				// 	}
+				// });
+			// }
+		}
+	}
+};
+</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/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/groupBooking.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/groupBooking/detail?id='+obj.ptId+'&spread='+obj.spread,
+					from:'wechat',//来源wechat公众号
+					// #endif
+					// #ifdef MP
+					from:'routine',//来源routine小程序
+					url:'/pages/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>

+ 809 - 0
pages/index/index.vue

@@ -0,0 +1,809 @@
+<template>
+	<view class="container">
+		<!-- 顶部logo and 搜索 start-->
+		<view class="status_bar"></view>
+		<!-- 背景图片 -->
+		<view class="top-bg">
+			<!-- <image :style="{ 'background':'#'+ titleNViewBackground }"></image> -->
+			<image src="../../static/img/index.png"></image>
+		</view>
+
+		<view class="top-search flex">
+			<view
+				class="search-box flex"
+				@click="clickSearch()">
+				<image
+					class="search"
+					src="../../static/sy-img/img8.png"
+					mode=""></image>
+				<view class="search-font">输入关键词搜索</view>
+			</view>
+		</view>
+		<!-- 顶部logo and 搜索 end-->
+		<view
+			class="jg"
+			style="background-color: #fff"></view>
+		<!-- 轮播图 start -->
+		<swiper
+			class="top-swiper"
+			autoplay="true"
+			duration="400"
+			interval="5000"
+			@change="swiperChange">
+			<swiper-item
+				v-for="(item, index) in processedCarouselList"
+				:key="index"
+				class="carousel-item"
+				@click="bannerNavToUrl(item)">
+				<image :src="item.pic" />
+			</swiper-item>
+		</swiper>
+		<!-- 轮播图 end -->
+		<!-- 分类 start -->
+		<view class="cate-section flex">
+			<view
+				class="cate-item flex"
+				@click="navto('/pages/category/category')">
+				<view class="img-wrapper flex">
+					<image
+						src="../../static/sy-img/img10.png"
+						mode=""></image>
+				</view>
+				<view class="item-title">所有商品</view>
+			</view>
+			<view
+				class="cate-item flex"
+				@click="navto('/pages/store/store')">
+				<view class="img-wrapper flex">
+					<image
+						src="../../static/sy-img/img4.png"
+						mode=""></image>
+				</view>
+				<view class="item-title">合作门店</view>
+			</view>
+
+			<view
+				class="cate-item flex"
+				@click="navto('/pages/gift/gift')">
+				<view class="img-wrapper flex">
+					<image
+						src="../../static/sy-img/img11.png"
+						mode=""></image>
+				</view>
+				<view class="item-title">礼包</view>
+			</view>
+			<view
+				class="cate-item flex"
+				@click="navto('/pages/shareQrCode/index')">
+				<view class="img-wrapper flex">
+					<image
+						src="../../static/sy-img/yq.png"
+						mode=""></image>
+				</view>
+				<view class="item-title">邀请好友</view>
+			</view>
+		</view>
+		<view class="goodsList">
+			<view class="goodsList-title flex">
+				<!-- <view class="goodsList-title flex"> -->
+				<view class="xian"></view>
+				<view class="title">积分兑换商城</view>
+				<view class="xian"></view>
+				<!-- </view> -->
+			</view>
+		</view>
+		<!-- 普通商品列表start -->
+		<view class="goodsList-box flex">
+			<view
+				class="goodsList-item"
+				v-for="(ls, ind) in firstList"
+				:key="ind"
+				@click="navTo('/pages/product/product?id=' + ls.id)">
+				<view class="image-wrapper">
+					<image
+						class="image"
+						:src="ls.image"
+						mode="scaleToFill"></image>
+				</view>
+				<view
+					class="list-item"
+					style="width: 229rpx; height: 195rpx">
+					<view class="title clamp2">
+						{{ ls.store_name }}
+					</view>
+					<view class="little">
+						{{ ls.unit_name || "" }}
+					</view>
+					<view class="hot-price">
+						<view
+							class="price"
+							style="
+								font-size: 26rpx;
+								color: #ff4c4c;
+								font-weight: bold;
+								display: flex;
+								white-space: nowrap;
+							">
+							¥{{ ls.price }}+{{ ls.min_integral }}积分
+							<image
+								class="imgCart"
+								src="../../static/sy-img/cart.png"
+								mode=""></image>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import { uview } from "uview-ui";
+	import { loadIndexs, groom } from "@/api/index.js";
+	import { getUserInfo, spread } from "@/api/user.js";
+	import {
+		getBargainList,
+		getProducts,
+		goodsDetail,
+		poster,
+	} from "@/api/product.js";
+	import { saveUrl, interceptor } from "@/utils/loginUtils";
+	import { mapState, mapMutations } from "vuex";
+	// #ifdef H5
+	import { weixindata, shareLoad } from "@/utils/wxAuthorized";
+	// #endif
+	export default {
+		data() {
+			return {
+				img: "",
+				titleNViewBackground: "",
+				text: "", //客服微信
+				current: 0,
+				swiperHeight: 0,
+				checkid: 0,
+				titleNViewBackground: "",
+				swiperCurrent: 0,
+				swiperLength: 0,
+				carouselList: [], //轮播列表
+				page: 1,
+				limit: 10,
+				loadingType: "more",
+				firstList: [],
+				shareImage: "",
+				text1: ["省委副书记亲临实地考察数字"],
+				max_integral: "", //最大积分
+				min_integral: "", //最小积分
+				openid: uni.getStorageSync("openid"),
+			};
+		},
+		computed: {
+			...mapState("user", ["hasLogin", "userInfo"]),
+		},
+		onShareAppMessage(options) {
+			// 设置菜单中的转发按钮触发转发事件时的转发内容
+			let pages = getCurrentPages(); //获取加载的页面
+			let currentPage = pages[pages.length - 1]; //获取当前页面的对象
+			let url = currentPage.route; //当前页面url
+			let item = currentPage.options; //如果要获取url中所带的参数可以查看options
+			let shareObj = {};
+			if (this.userInfo.uid) {
+				shareObj = {
+					title: this.userInfo.nickname + "邀请您加入华中康新堂", // 默认是小程序的名称(可以写slogan等)
+					path: url + "?scene=" + this.userInfo.uid, // 默认是当前页面,必须是以‘/’开头的完整路径
+					imageUrl: "",
+					success: function (res) {
+						// 转发成功之后的回调
+						if (res.errMsg == "shareAppMessage:ok") {
+						}
+					},
+					fail: function () {
+						// 转发失败之后的回调
+						if (res.errMsg == "shareAppMessage:fail cancel") {
+							// 用户取消转发
+						} else if (res.errMsg == "shareAppMessage:fail") {
+							// 转发失败,其中 detail message 为详细失败信息
+						}
+					},
+				};
+			} else {
+				shareObj = {
+					title: "华中康新堂", // 默认是小程序的名称(可以写slogan等)
+					path: url, // 默认是当前页面,必须是以‘/’开头的完整路径
+					imageUrl: "",
+					success: function (res) {
+						// 转发成功之后的回调
+						if (res.errMsg == "shareAppMessage:ok") {
+						}
+					},
+					fail: function () {
+						// 转发失败之后的回调
+						if (res.errMsg == "shareAppMessage:fail cancel") {
+							// 用户取消转发
+						} else if (res.errMsg == "shareAppMessage:fail") {
+							// 转发失败,其中 detail message 为详细失败信息
+						}
+					},
+				};
+			}
+
+			return shareObj;
+		},
+		onReachBottom() {
+			this.getgroom();
+		},
+		onLoad: function (option) {
+			// #ifdef MP
+			if (option.scene) {
+				// 存储小程序邀请人
+				uni.setStorage({
+					key: "spread_code",
+					data: option.scene,
+				});
+			}
+			// #endif
+			// #ifdef H5
+			if (option.spread) {
+				// 存储小程序邀请人
+				uni.setStorage({
+					key: "spread",
+					data: option.spread,
+				});
+			}
+			// #endif
+		},
+		onShow: function () {
+			this.page = 1;
+			this.limit = 10;
+			this.loadingType = "more";
+			this.firstList = [];
+			this.loadData();
+			this.getgroom();
+			if (this.hasLogin) {
+				this.getuser();
+			}
+		},
+		computed: {
+			processedCarouselList() {
+				return this.carouselList.map(item => {
+					// 如果颜色值没有带#前缀,则添加#前缀
+					if (!item.color.startsWith("#")) {
+						return {
+							...item,
+							color: `#${item.color}`,
+						};
+					}
+					return item;
+				});
+			},
+		},
+		methods: {
+			...mapMutations("user", ["setUserInfo"]),
+			getuser() {
+				getUserInfo({})
+					.then(({ data }) => {
+						this.setUserInfo(data);
+					})
+					.catch(e => {
+						console.log(e);
+					});
+			},
+			getgroom() {
+				const obj = this;
+				if (
+					obj.loadingType == "nomore" ||
+					obj.loadingType == "loading"
+				) {
+					return;
+				}
+				obj.loadingType = "loading";
+				groom(
+					{
+						page: this.page,
+						limit: this.limit,
+					},
+					3
+				).then(({ data }) => {
+					console.log(data, "123456");
+					// obj.firstList = obj.firstList.concat(data.list)
+					obj.page++;
+					if (obj.limit == data.list.length) {
+						obj.loadingType = "more";
+					} else {
+						obj.loadingType = "nomore";
+					}
+				});
+			},
+			navto(url, type = 0) {
+				if (type == 1) {
+					if (!this.hasLogin) {
+						// 保存地址
+						saveUrl();
+						// 登录拦截
+						interceptor();
+					} else {
+						uni.navigateTo({
+							url,
+							fail() {
+								uni.switchTab({
+									url,
+								});
+							},
+						});
+					}
+				} else {
+					uni.navigateTo({
+						url,
+						fail() {
+							uni.switchTab({
+								url,
+							});
+						},
+					});
+				}
+			},
+			navTo(url) {
+				if (url == "") {
+					this.$api.msg("暂未开通,敬请期待");
+				} else {
+					this.navto(url);
+				}
+			},
+			// 點擊搜索框
+			clickSearch() {
+				uni.navigateTo({
+					url: "/pages/product/search",
+				});
+			},
+			// 监听图片加载完成
+			onImageError(key, index) {
+				this[key][index].image = "/static/error/errorImage.jpg";
+			},
+			// 请求载入数据
+			async loadData() {
+				loadIndexs({})
+					.then(({ data }) => {
+						let goods = data.info;
+						console.log(goods, "商品信息");
+						this.carouselList = data.banner;
+						this.swiperLength = this.carouselList.length;
+						this.firstList = data.integral; //首页商品
+						uni.stopPullDownRefresh();
+					})
+					.catch(e => {
+						uni.stopPullDownRefresh();
+					});
+			},
+			//轮播图切换修改背景色
+			swiperChange(e) {
+				const index = e.detail.current;
+				// console.log('1111',index);
+				this.swiperCurrent = index;
+				this.titleNViewBackground = this.carouselList[index].color;
+				// console.log(this.titleNViewBackground,'titleNViewBackground');
+				this.img = this.carouselList[index].pic;
+				console.log(this.img, "img");
+			},
+			// 轮播图跳转
+			bannerNavToUrl(item) {
+				// #ifdef H5
+				console.log(item.wap_url.indexOf("http"), "banner");
+				if (item.wap_url.indexOf("http") >= 0) {
+					window.location.href = item.wap_url;
+				}
+				// #endif
+				//测试数据没有写id,用title代替
+				uni.navigateTo({
+					url: item.wap_url,
+				});
+			},
+			comfirm(text) {
+				console.log(text);
+				const result = this.uniCopy(text);
+				if (result === false) {
+					uni.showToast({
+						title: "不支持",
+					});
+				} else {
+					uni.showToast({
+						title: "复制成功",
+						icon: "none",
+					});
+				}
+				this.$refs.popupkf.close();
+			},
+			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
+			},
+			// 打开客服
+			openKf() {
+				this.$refs.popupkf.open();
+			},
+			// 关闭客服
+			cancel() {
+				this.$refs.popupkf.close();
+			},
+		},
+	};
+</script>
+
+<style lang="scss">
+	page {
+		min-height: 100%;
+		height: auto;
+		background: #ffffff;
+	}
+	// 背景图片
+	.top-bg {
+		position: absolute;
+		top: 0;
+		left: 0;
+		right: 0;
+		width: 750rpx;
+		height: 346rpx;
+
+		image {
+			width: 100%;
+			background: linear-gradient(to bottom, #ff0000, #ffffff);
+		}
+	}
+
+	// 顶部搜索
+	.top-search {
+		position: relative;
+		z-index: 2;
+		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: rgba(#ffffff, 0.47);
+			box-shadow: 0rpx 9rpx 21rpx 0rpx 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: #ffffff;
+			}
+		}
+	}
+
+	// 顶部轮播图
+	.top-swiper {
+		margin: 20rpx auto 0;
+		width: 700rpx;
+		border-radius: 14rpx;
+
+		image {
+			width: 700rpx;
+			height: 300rpx;
+		}
+	}
+
+	.swiper-btm {
+		height: 60rpx;
+		width: 750rpx;
+		background-color: #fff;
+		margin-bottom: 20rpx;
+		font-size: 26rpx;
+		font-weight: 500;
+		color: #333333;
+
+		.btm-item {
+			flex-grow: 1;
+			justify-content: center;
+
+			image {
+				width: 25rpx;
+				height: 25rpx;
+				margin-right: 14rpx;
+			}
+		}
+	}
+
+	.jg {
+		height: 20rpx;
+		background: #f8f8f8;
+	}
+
+	// 分类
+	.cate-section {
+		justify-content: space-around;
+		background-color: #fff;
+		padding: 30rpx 0 30rpx;
+
+		.cate-item {
+			flex-grow: 0;
+			width: 20%;
+			flex-direction: column;
+			text-align: center;
+			align-items: center;
+			justify-content: center;
+
+			.img-wrapper {
+				width: 100rpx;
+				height: 100rpx;
+				border-radius: 20rpx;
+				position: relative;
+
+				image {
+					width: 100%;
+					height: 100%;
+					position: absolute;
+					left: 50%;
+					top: 50%;
+					transform: translate(-50%, -50%);
+				}
+			}
+
+			.item-title {
+				margin-top: 15rpx;
+				font-size: 24rpx;
+				font-weight: 500;
+				color: #333333;
+			}
+		}
+	}
+
+	.popup-box {
+		width: 522rpx;
+		height: 605rpx;
+		background-color: #ffffff;
+		border-radius: 20rpx;
+		position: relative;
+
+		.img {
+			position: relative;
+			top: -56rpx;
+			left: 0;
+			width: 522rpx;
+			height: 132rpx;
+			display: flex;
+			justify-content: center;
+
+			image {
+				border-radius: 20rpx 20rpx 0 0;
+				width: 450rpx;
+				height: 132rpx;
+			}
+		}
+
+		.mian {
+			margin-top: -44rpx;
+			display: flex;
+			flex-direction: column;
+			align-items: center;
+			// padding: 32rpx 32rpx;
+			background-color: #ffffff;
+			border-radius: 0 0 20rpx 20rpx;
+			text-align: center;
+
+			.delivery {
+				font-size: 40rpx;
+				color: #333333;
+				display: flex;
+				align-items: center;
+				flex-direction: column;
+
+				image {
+					margin-top: 48rpx;
+					width: 172rpx;
+					height: 160rpx;
+				}
+			}
+
+			.nocancel {
+				font-size: 32rpx;
+				color: #333333;
+				margin-top: 14rpx;
+			}
+
+			.comfirm-box {
+				margin-top: 52rpx;
+				display: flex;
+				// margin-bottom: 32rpx;
+
+				// justify-content: space-around;
+				.cancel {
+					display: flex;
+					align-items: center;
+					justify-content: center;
+					width: 197rpx;
+					height: 74rpx;
+					border: 1px solid #dcc786;
+					border-radius: 38rpx;
+
+					font-size: 32rpx;
+					color: #605128;
+				}
+
+				.comfirm {
+					margin-left: 32rpx;
+					display: flex;
+					align-items: center;
+					justify-content: center;
+					width: 197rpx;
+					height: 74rpx;
+					background: linear-gradient(
+						-90deg,
+						#d1ba77 0%,
+						#f7e8ad 100%
+					);
+					border-radius: 38px;
+					font-size: 32rpx;
+					color: #605128;
+				}
+			}
+		}
+	}
+
+	.jhq {
+		margin: 0 auto;
+		width: 750rpx;
+
+		image {
+			width: 100%;
+		}
+	}
+
+	.goodsList {
+		background: #ffffff;
+		padding-top: 41rpx;
+
+		.goodsList-title {
+			margin: 0 auto 32rpx;
+			justify-content: center;
+			// width: 376rpx;
+			// height: 34rpx;
+
+			.xian {
+				width: 120rpx;
+				height: 1rpx;
+				background: #999999;
+			}
+			.title {
+				margin: 0 70rpx;
+				font-size: 30rpx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #363636;
+			}
+		}
+	}
+
+	.goodsList-box {
+		background: #ffffff;
+		padding: 26rpx 20rpx 20rpx;
+		flex-wrap: wrap;
+
+		.goodsList-item {
+			width: 345rpx;
+			background-color: #ffffff;
+			border-radius: 12rpx;
+			box-shadow: 0 0 15rpx rgba(0, 0, 0, 0.2);
+			margin-bottom: 20rpx;
+
+			.image-wrapper {
+				width: 345rpx;
+				height: 345rpx;
+				border-radius: 3px;
+				position: relative;
+
+				.image {
+					width: 100%;
+					height: 100%;
+					opacity: 1;
+					border-radius: 12rpx 12rpx 0 0;
+				}
+			}
+
+			.title {
+				margin-top: 28rpx;
+				padding: 0 20rpx;
+				font-size: 30rpx;
+				font-weight: 500;
+				color: #333333;
+				overflow: hidden;
+				text-overflow: ellipsis;
+				white-space: nowrap;
+				text-overflow: ellipsis; /* 溢出显示省略号 */
+				overflow: hidden; /* 溢出隐藏 */
+				white-space: nowrap; /* 强制不换行 */
+			}
+			.little {
+				width: 154rpx;
+				height: 25rpx;
+				margin-top: 16rpx;
+				margin-left: 20rpx;
+				font-size: 26rpx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #666666;
+			}
+
+			.imgCart {
+				margin-left: 12rpx;
+				width: 44rpx;
+				height: 44rpx;
+			}
+
+			.hot-price {
+				margin-top: 50rpx;
+				width: 195rpx;
+				height: 29rpx;
+				display: flex;
+				justify-content: flex-start;
+				align-items: center;
+
+				.price {
+					margin-left: 10rpx;
+					font-size: 32rpx;
+					color: #9c0b18;
+					font-weight: 500;
+					display: flex;
+					justify-content: flex-start;
+					align-items: center;
+
+					.ot-price {
+						margin-right: 7rpx;
+						font-size: 26rpx;
+						font-weight: 500;
+						text-decoration: line-through;
+						color: #999999;
+					}
+				}
+			}
+		}
+	}
+</style>

+ 22 - 0
pages/invite/invite.vue

@@ -0,0 +1,22 @@
+<template>
+	<view class="yq">
+		<image class="py" src="../../static/sy-img/yqhy.png" mode=""></image>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				
+			};
+		}
+	}
+</script>
+
+<style lang="scss">
+.py {
+	width: 750rpx;
+	height: 1334rpx;
+}
+</style>

+ 318 - 0
pages/merchant/becomeShop.vue

@@ -0,0 +1,318 @@
+<template>
+	<view class="content">
+		<view class="enterprise">
+			<view class="enterprise-box">
+				<view class="box-item">
+					<view class="item-left">店铺名:</view>
+					<view class="item-right"><input type="text" placeholder="请输入店铺名" v-model="name" /></view>
+				</view>
+				<view class="box-item">
+					<view class="item-left">商家电话:</view>
+					<view class="item-right"><input type="text" placeholder="请输入商家电话" v-model="telphone" /></view>
+				</view>
+				<view class="box-item">
+					<view class="item-left">商家省市区:</view>
+					<pickerAddress class="item-right" @change="onCityClick">{{ addressDetail || '请选择地址(点击选择地址)' }}</pickerAddress>
+				</view>
+				<view class="box-item" @click="getLocation">
+					<view class="item-left">商家地址:</view>
+					<view class="item-right"><input type="text" placeholder="请选择详细地址" v-model="showaddress" /></view>
+				</view>
+			</view>
+			<view class="enterprise-box">
+				<view class="box-item">
+					<view class="item-left">联系人:</view>
+					<view class="item-right"><input type="text" placeholder="请输入联系人" v-model="nameP" /></view>
+				</view>
+				<!-- <view class="box-item">
+					<view class="item-left">联系电话:</view>
+					<view class="item-right"><input type="text" placeholder="请输入联系电话" v-model="phone" /></view>
+				</view> -->
+				<view class="box-item">
+					<view class="item-left">主营项目:</view>
+					<view class="item-right"><input type="text" placeholder="请输入您的主营项目" v-model="introduction" /></view>
+				</view>
+			</view>
+			<view class="enterprise-box">
+				<view class="box-item">
+					<view class="item-left">商户简介:</view>
+					<view class="item-right"><input type="text" placeholder="请输入您的商户简介" v-model="introductory" /></view>
+				</view>
+				<view class="box-item">
+					<view class="item-left">身份证:</view>
+					<view class="item-right"><input type="text" placeholder="请输入您的身份证" v-model="Idcard" /></view>
+				</view>
+				<view class="box-item">
+					<view class="item-left">推荐人id:</view>
+					<view class="item-right"><input type="text" placeholder="请输入您的推荐人id" v-model="spared" /></view>
+				</view>
+				<view class="box-item1">
+					<view class="item-left">店铺logo:</view>
+					<view class="item-right">
+						<image :src="cardimg" mode="" class="upload-img" @click.stop="imgsub" v-if="cardimg"></image>
+						<image src="https://zhibo.liuniu946.com/img/phone.png" class="upload-img" mode="" v-if="!cardimg" @click.stop="imgsub"></image>
+					</view>
+				</view>
+			</view>
+			<view class="enterprise-box">
+				<view class="box-item1">
+					<view class="item-left">营业执照:</view>
+					<view class="item-right">
+						<image :src="imgY" mode="" class="upload-img" @click.stop="imgsubY" v-if="imgY"></image>
+						<image src="https://zhibo.liuniu946.com/img/phone.png" class="upload-img" mode="" v-if="!imgY" @click.stop="imgsubY"></image>
+					</view>
+				</view>
+			</view>
+		</view>
+		<!-- <view class="comfirm1" v-if="userInfo.company == 0">正在审核中</view>
+		<view class="comfirm1" v-if="userInfo.company == 1">已通过</view>
+		<view class="comfirm" v-else @click="comfirm">提交申请</view> -->
+		<view class="comfirm" @click="comfirm">提交申请</view>
+	</view>
+</template>
+
+<script>
+import pickerAddress from '@/components/wangding-pickerAddress/wangding-pickerAddress.vue';
+import { mapState, mapMutations } from 'vuex';
+import { upload, apply } from '@/api/order.js';
+export default {
+	components: {
+		pickerAddress
+	},
+	computed: {
+		...mapState(['userInfo'])
+	},
+	data() {
+		return {
+			imgY: '', //营业执照
+			checked: false,
+			name: '', //店铺名
+			telphone: '', //商家电话
+			introduction: '', //主营项目
+			introductory: '', //简介
+			Idcard: '', //身份证号码
+			spared: '', //推荐人
+			nameP: '', //联系人
+			phone: '', //联系人电话
+			showaddress: '', //详细地址
+			addressDetail: '', //省市区
+			cardimg: '', //店铺logo
+			latitude: '',
+			longitude: ''
+		};
+	},
+	methods: {
+		// 上传图片
+		imgsub() {
+			console.log('上传logo');
+			upload({
+				filename: ''
+			}).then(data => {
+				console.log('data', data);
+				this.cardimg = data[0].url;
+			});
+		},
+		// 上传图片
+		imgsubY() {
+			console.log('i上传营业执照');
+			upload({
+				filename: ''
+			}).then(data => {
+				this.imgY = data[0].url;
+			});
+		},
+		check() {
+			this.checked = !this.checked;
+		},
+		getLocation() {
+			console.log('选择当前位置');
+			let obj = this;
+			uni.chooseLocation({
+				success: function(res) {
+					console.log('1111:' + res);
+					console.log('位置名称:' + res.name);
+					console.log('详细地址:' + res.address);
+					console.log('纬度:' + res.latitude);
+					console.log('经度:' + res.longitude);
+					obj.latitude = res.latitude;
+					obj.longitude = res.longitude;
+					if (res.address) {
+						obj.showaddress = res.address;
+					} else {
+						obj.showaddress = res.name;
+					}
+				}
+			});
+		},
+		// 选中城市切换
+		onCityClick({ data }) {
+			this.addressDetail = data.join(',');
+		},
+		// 提交申请
+		comfirm() {
+			const obj = this;
+			if (obj.name == '') {
+				obj.$api.msg('请输入店铺名');
+				return;
+			}
+			const reg1 = /^(\+?0?86-?)?1[\d]\d{9}$/;
+			if (!reg1.test(obj.telphone)) {
+				obj.$api.msg('请输入商家电话');
+				return;
+			}
+			if (obj.introduction == '') {
+				obj.$api.msg('请输入您的主营项目');
+				return;
+			}
+			if (obj.introductory == '') {
+				obj.$api.msg('请输入您的商铺简介');
+				return;
+			}
+			if (obj.spared == '') {
+				obj.$api.msg('请输入您的推荐人');
+				return;
+			}
+			if (obj.Idcard == '') {
+				obj.$api.msg('请输入身份证号');
+				return;
+			}
+			if (obj.nameP == '') {
+				obj.$api.msg('请输入联系人');
+				return;
+			}
+			if (obj.adress == '') {
+				obj.$api.msg('请选择详细地址');
+				return;
+			}
+			if (obj.addressDetail == '') {
+				obj.$api.msg('请选择省市区');
+				return;
+			}
+			if (obj.cardimg == '') {
+				obj.$api.msg('请上传店铺LOGO');
+				return;
+			}
+			if (obj.imgY == '') {
+				obj.$api.msg('请上传营业执照');
+				return;
+			}
+			apply({
+				name: obj.name,
+				introduction: obj.introductory,
+				phone: obj.telphone,
+				address: obj.addressDetail,
+				detailed_address: obj.showaddress,
+				image: obj.cardimg,
+				latitude: obj.latitude,
+				longitude: obj.longitude,
+				leader: obj.nameP,
+				id_card: obj.Idcard,
+				job: obj.introduction,
+				cert: obj.imgY,
+				spread_uid: obj.spared
+			})
+				.then(e => {
+					uni.showToast({
+						title: '申请成功,请耐心等待审核',
+						icon: 'success',
+						duration: 2000
+					});
+				})
+				.catch(function(e) {
+					console.log('出错了');
+					console.log(e);
+				});
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+.content {
+}
+
+.enterprise-box {
+	background-color: #ffffff;
+	border-radius: 12rpx;
+	width: 100%;
+	margin-top: 24rpx;
+	.box-item {
+		display: flex;
+		border-bottom: 1rpx solid #f0f0f0;
+		padding: 32rpx 24rpx;
+		align-items: center;
+		&:nth-last-child(1) {
+			border-bottom: none;
+		}
+	}
+	.item-left {
+		font-size: 28rpx;
+		width: 160rpx;
+		flex-shrink: 0;
+	}
+	.item-right {
+		width: 100%;
+		margin-left: 24rpx;
+		font-size: 28rpx;
+		display: flex;
+		align-items: center;
+		color: #999999;
+		input {
+			font-size: 28rpx;
+		}
+		image {
+			width: 160rpx;
+			height: 160rpx;
+			margin-top: 24rpx;
+			margin-left: 60rpx;
+		}
+	}
+	.box-item1 {
+		display: flex;
+		border-bottom: 1rpx solid #f0f0f0;
+		padding: 32rpx 24rpx;
+		// align-items: center;
+		&:nth-last-child(1) {
+			border-bottom: none;
+		}
+	}
+}
+.comfirm {
+	margin: 20rpx auto 0;
+	border-radius: 80rpx;
+	width: 650rpx;
+	height: 80rpx;
+	background: #5dbb7c;
+	display: flex;
+	justify-content: center;
+	align-items: center;
+	color: #ffffff;
+	font-size: 36rpx;
+}
+.comfirm1 {
+	margin: 0 auto;
+	border-radius: 80rpx;
+	width: 650rpx;
+	height: 100rpx;
+	background: #b1b1b1;
+	display: flex;
+	justify-content: center;
+	align-items: center;
+	color: #ffffff;
+	font-size: 36rpx;
+}
+.checkbox {
+	font-size: 32rpx;
+	color: #eeeeee;
+	background: #eeeeee;
+	border-radius: 50px;
+}
+.checked {
+	color: #fd4343;
+	background: #ffffff;
+}
+.radio {
+	padding-top: 5rpx;
+	margin-right: 15rpx;
+}
+</style>

+ 226 - 0
pages/merchant/commodity.vue

@@ -0,0 +1,226 @@
+<template>
+	<view class="content">
+		<!-- <view class="status_bar"></view>
+		<view class="content-money">
+			<view class="money-box">
+				<view class="goback-box" @click="toBack">
+					<image class="goback" src="../../static/img/back.png" mode=""></image>
+					</view>
+				<view class="header">商品管理</view>
+			</view>
+		</view> -->
+		<view class="commodity-box">
+			<view class="commodity" v-for="item in orderList">
+				<view class="commodity-detail">
+					<view class="commodity-img"><image :src="item.image" mode=""></image></view>
+					<view class="commodity-content">
+						<view class="top">{{item.store_name}}</view>
+						<view class="bottom">
+							<view class="price">
+								<text class="text">¥</text>
+								{{item.price}}
+							</view>
+							<view class="status">库存:{{item.in_stock}}</view>
+						</view>
+					</view>
+				</view>
+			</view>
+			<uni-load-more :status="loadingType"></uni-load-more>
+		</view>
+	</view>
+</template>
+
+<script>
+import uniLoadMore from '@/components/uni-load-more/uni-load-more.vue';
+import { goods } from '@/api/merchant.js'
+export default {
+	data() {
+		return {
+			loadingType: 'more',
+			orderList: [],
+			page: 1, //当前页面
+			limit: 20 //每次信息条数
+		};
+	},
+	onLoad() {
+		this.loadData();
+	},
+	onReachBottom() {
+		this.loadData();
+	},
+	methods: {
+		loadData() {
+			let obj = this;
+			console.log('加载数据');
+			if (obj.loadingType == 'noMore' || obj.loadingType == 'loading') {
+				return;
+			}
+			obj.loadingType = 'loading'
+			goods({page:obj.page,limit:obj.limit}).then(({data}) =>{
+				console.log(data)
+				obj.orderList = obj.orderList.concat(data.data);
+				obj.page ++
+				if (data.data.length == obj.limit) {
+					obj.loadingType = 'more';
+				} else {
+					obj.loadingType = 'noMore';
+				}
+			})
+		},
+		// 点击返回 我的页面
+		toBack() {
+			uni.navigateBack({
+				
+			})
+		},
+		choose() {
+			this.isBian = !this.isBian;
+		},
+		nav(url){
+			uni.navigateTo({
+				url
+			})
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+page,
+.content {
+	background: $page-color-base;
+	height: 100%;
+}
+
+.swiper-box {
+	height: calc(100% - 40px);
+}
+
+.list-scroll-content {
+	height: 100%;
+}
+.status_bar {
+	height: var(--status-bar-height);
+	width: 100%;
+	background: #ffffff;
+}
+.money-box {
+	height: 80rpx;
+	color: #000000;
+	text-align: center;
+	font-size: 35rpx;
+	position: relative;
+	background-color: #FFFFFF;
+	.header {
+		position: absolute;
+		left: 0;
+		top: 0;
+		width: 100%;
+		height: 80rpx;
+		font-size: 32rpx;
+		font-weight: 700;
+		z-index: 99;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+	}
+	.goback-box {
+		position: absolute;
+		left: 24rpx;
+		top: 0;
+		height: 80rpx;
+		display: flex;
+		align-items: center;
+	}
+	.goback {
+		z-index: 100;
+		width: 20rpx;
+		height: 34rpx;
+	}
+}
+
+.commodity-box {
+	width: 750rpx;
+	// margin: 20rpx 0;
+	// background-color: #FFFFFF;
+
+	.commodity {
+		width: 750rpx;
+
+		background-color: #ffffff;
+		.checkbox1 {
+			font-size: 44rpx;
+			line-height: 1;
+			padding: 4rpx;
+			color: $font-color-disabled;
+			background: red;
+			border-radius: 50rpx;
+		}
+
+		.commodity-detail {
+			padding: 30rpx 0;
+			padding: 30 34rpx 0 30rpx;
+			display: flex;
+
+			.commodity-img {
+				margin: 0 30rpx;
+				width: 147rpx;
+				height: 146rpx;
+				border-radius: 10rpx;
+
+				image {
+					width: 100%;
+					height: 100%;
+				}
+			}
+
+			.commodity-content {
+				width: 500rpx;
+				display: flex;
+				flex-direction: column;
+				justify-content: space-between;
+				padding: 10rpx 0;
+				.top {
+					white-space: nowrap;
+					overflow: hidden;
+					text-overflow: ellipsis;
+					font-size: 28rpx;
+					font-family: PingFangSC;
+					font-weight: 500;
+					color: #333333;
+				}
+
+				.bottom {
+					display: flex;
+					justify-content: space-between;
+					align-items: center;
+
+					.price {
+						font-size: 36rpx;
+						font-family: PingFang SC;
+						font-weight: bold;
+						color: #fd5b23;
+						.text {
+							font-size: 24rpx;
+							font-family: PingFang SC;
+							font-weight: bold;
+							color: #fd5b23;
+						}
+					}
+
+					.status {
+						padding: 6rpx;
+						background: #fee1d7;
+						border-radius: 5rpx;
+						font-size: 20rpx;
+						font-family: PingFangSC;
+						font-weight: 500;
+						color: #fd5b23;
+					}
+				}
+			}
+		}
+	}
+}
+
+</style>

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