Browse Source

2023-5-19

cmy 1 year ago
commit
d4da66521b
100 changed files with 38786 additions and 0 deletions
  1. 5 0
      .gitignore
  2. 275 0
      App.vue
  3. 58 0
      api/address.js
  4. 26 0
      api/cart.js
  5. 18 0
      api/category.js
  6. 43 0
      api/commission.js
  7. 29 0
      api/coupon.js
  8. 18 0
      api/favorite.js
  9. 56 0
      api/groupBooking.js
  10. 36 0
      api/index.js
  11. 11 0
      api/integral.js
  12. 55 0
      api/login.js
  13. 38 0
      api/money.js
  14. 19 0
      api/notice.js
  15. 142 0
      api/order.js
  16. 131 0
      api/product.js
  17. 1123 0
      api/qqmap-wx-jssdk.js
  18. 19 0
      api/reply.js
  19. 18 0
      api/seckill.js
  20. 27 0
      api/set.js
  21. 10 0
      api/shareQrCode.js
  22. 27 0
      api/sign.js
  23. 36 0
      api/team.js
  24. 50 0
      api/user.js
  25. 106 0
      api/wallet.js
  26. 37 0
      api/wx.js
  27. 18 0
      components/empty.vue
  28. 63 0
      components/evan-checkbox/evan-checkbox-group.vue
  29. 203 0
      components/evan-checkbox/evan-checkbox-popup.vue
  30. 222 0
      components/evan-checkbox/evan-checkbox.vue
  31. 51 0
      components/evan-radio/evan-radio-group.vue
  32. 229 0
      components/evan-radio/evan-radio.vue
  33. 502 0
      components/gbro-marquee/marquee.vue
  34. 196 0
      components/share.vue
  35. 206 0
      components/ss-calendar/ss-calendar.vue
  36. 1201 0
      components/tki-qrcode/qrcode.js
  37. 212 0
      components/tki-qrcode/tki-qrcode.vue
  38. 122 0
      components/uni-badge/uni-badge.vue
  39. 181 0
      components/uni-countdown/uni-countdown.vue
  40. 179 0
      components/uni-countdown/uni-countdowns.vue
  41. 96 0
      components/uni-icons/icons.js
  42. 10 0
      components/uni-icons/uni-icons.vue
  43. 230 0
      components/uni-list-item/uni-list-item.vue
  44. 68 0
      components/uni-list/uni-list.vue
  45. 65 0
      components/uni-list/uni-refresh.vue
  46. 87 0
      components/uni-list/uni-refresh.wxs
  47. 194 0
      components/uni-load-more/uni-load-more.vue
  48. 397 0
      components/uni-notice-bar/uni-notice-bar.vue
  49. 198 0
      components/uni-number-box.vue
  50. 264 0
      components/uni-popup/uni-popup.vue
  51. 141 0
      components/uni-rate/uni-rate.vue
  52. 279 0
      components/uni-transition/uni-transition.vue
  53. 226 0
      components/upload-images.vue
  54. 11282 0
      components/w-picker/areadata/areadata.js
  55. 754 0
      components/w-picker/date-picker.vue
  56. 341 0
      components/w-picker/half-picker.vue
  57. 264 0
      components/w-picker/linkage-picker.vue
  58. 345 0
      components/w-picker/range-picker.vue
  59. 185 0
      components/w-picker/region-picker.vue
  60. 129 0
      components/w-picker/selector-picker.vue
  61. 252 0
      components/w-picker/shortterm-picker.vue
  62. 220 0
      components/w-picker/time-picker.vue
  63. 26 0
      components/w-picker/w-picker.css
  64. 346 0
      components/w-picker/w-picker.vue
  65. 151 0
      components/wangding-pickerAddress/data.js
  66. 103 0
      components/wangding-pickerAddress/wangding-pickerAddress.vue
  67. 44 0
      main.js
  68. 121 0
      manifest.json
  69. 30 0
      node_modules/jweixin-module/README.md
  70. 0 0
      node_modules/jweixin-module/out/index.js
  71. 60 0
      node_modules/jweixin-module/package.json
  72. 11 0
      package-lock.json
  73. 656 0
      pages.json
  74. 352 0
      pages/activity/listFri.vue
  75. 307 0
      pages/activity/listOne.vue
  76. 352 0
      pages/activity/listSen.vue
  77. 309 0
      pages/address/addPinkManage.vue
  78. 208 0
      pages/address/address.vue
  79. 309 0
      pages/address/addressManage.vue
  80. 209 0
      pages/address/addressPink.vue
  81. 868 0
      pages/cart/cart.vue
  82. 738 0
      pages/category/category.vue
  83. 536 0
      pages/commission/commission.vue
  84. 717 0
      pages/commission/order.vue
  85. 640 0
      pages/commission/orderGroup.vue
  86. 361 0
      pages/coupon/coupon.vue
  87. 200 0
      pages/coupon/getcoupon.vue
  88. 332 0
      pages/detail/detail.vue
  89. 177 0
      pages/favorites/favorites.vue
  90. 756 0
      pages/groupBooking/1.vue
  91. 421 0
      pages/groupBooking/common/nowList.vue
  92. 390 0
      pages/groupBooking/detail.vue
  93. 2318 0
      pages/groupBooking/groupdetails.vue
  94. 912 0
      pages/groupBooking/index.vue
  95. 75 0
      pages/groupBooking/inviteImg.vue
  96. 790 0
      pages/groupBooking/klondike.vue
  97. 445 0
      pages/groupBooking/suborder.vue
  98. 24 0
      pages/groupBooking/video.vue
  99. 436 0
      pages/index/address.vue
  100. 2031 0
      pages/index/index.vue

+ 5 - 0
.gitignore

@@ -0,0 +1,5 @@
+.DS_Store
+unpackage/dist
+unpackage/cache
+unpackage/release
+.hbuilderx

+ 275 - 0
App.vue

@@ -0,0 +1,275 @@
+<script>
+/**
+ * vuex管理登陆状态,具体可以参考官方登陆模板示例
+ */
+import { mapMutations } from 'vuex';
+// #ifdef H5
+import { weixindata } from './utils/wxAuthorized';
+// #endif
+export default {
+	data() {
+		return {};
+	},
+	methods: {
+		...mapMutations('user',['login', 'hasLogin', 'setUserInfo']),
+		...mapMutations(['setAddressData'])
+	},
+	onLaunch: function(urlObj) {
+		let obj = this;
+		// 加载缓存中的用户信息
+		let userInfo = uni.getStorageSync('userInfo') || '';
+		let token = uni.getStorageSync('token');
+		// let GetInfo = uni.getStorageSync('GetInfo');
+		// console.log(GetInfo,8)
+		// 判断是否拥有用户信息
+		if (userInfo.uid) {
+			// 更新登录信息
+			obj.login();
+			//更新登陆状态
+			uni.getStorage({
+				key: 'userInfo',
+				success: res => {
+					obj.setUserInfo(res.data);
+				}
+			});
+		}
+		// #ifdef H5
+		//判断是否已经缓存浏览器
+		let bool = uni.getStorageSync('weichatBrowser') || '';
+		if (bool === '') {
+			//判断是否为微信浏览
+			bool = navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger';
+			// 保存当前是否为微信内核浏览器
+			uni.setStorageSync('weichatBrowser', bool);
+		}
+		// 判断是否为微信浏览器
+		if (bool) {
+			// 加载微信注册信息
+			weixindata();
+		}
+		// #endif
+		// if ( userInfo.is_promoter == 1 ) {
+		// 	uni.navigateTo({
+		// 		url: '/pages/groupBooking/index',
+		// 		fail(e) {
+		// 			uni.navigateTo({
+		// 				url: '/pages/index/index'
+		// 			})
+		// 		}
+		// 	})
+		// }
+	}
+};
+</script>
+
+<style lang="scss">
+/*全局公共样式和字体图标*/
+@import '/static/css/cmy.css';
+@import '/static/iconfont/font.scss';
+view,
+scroll-view,
+swiper,
+swiper-item,
+cover-view,
+cover-image,
+icon,
+text,
+rich-text,
+progress,
+button,
+checkbox,
+form,
+input,
+label,
+radio,
+slider,
+switch,
+textarea,
+navigator,
+audio,
+camera,
+image,
+video {
+	box-sizing: border-box;
+}
+/* 骨架屏替代方案 */
+.Skeleton {
+	background: #f3f3f3;
+	padding: 20rpx 0;
+	border-radius: 8rpx;
+}
+
+/* 图片载入替代方案 */
+.image-wrapper {
+	font-size: 0;
+	border-radius: 4px;
+	image {
+		width: 100%;
+		height: 100%;
+	}
+}
+// 设置富文本中图片最大宽度
+uni-rich-text img {
+	max-width: 100% !important;
+}
+
+//上下居中
+.flex_center_down_center{
+	display: flex;
+	align-items: center;
+}
+//左右顶格
+.flex_between{
+	display: flex;
+	justify-content: space-between;
+}
+//左右顶格加上下居中
+.flex-between-center{
+	display: flex;
+	justify-content: space-between;
+	align-items: center;
+}
+//完全居中
+.flex-center{
+	display: flex;
+	justify-content: center;
+	align-items: center;
+}
+.flex-start-center{
+	display: flex;
+	justify-content: flex-start;
+	align-items: center;
+}
+
+
+/*边框*/
+.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;
+}
+page {
+	background-color: $page-color-base;
+	// 设置默认字体
+	font-family: PingFang SC, STHeitiSC-Light, Helvetica-Light, arial, sans-serif, Droid Sans Fallback;
+}
+</style>

+ 58 - 0
api/address.js

@@ -0,0 +1,58 @@
+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 setAddressDefault(data) {
+	return request({
+		url: '/api/address/default/set',
+		method: 'post',
+		data
+	});
+}
+// 判断地址是否超出配送距离
+export function check_address(data) {
+	return request({
+		url: '/api/check_address',
+		method: 'post',
+		data
+	});
+}
+
+// 获取拼团地址
+export function pinkAddress(data) {
+	return request({
+		url: '/api/address/detail/pink',
+		method: 'get',
+		data
+	});
+}
+
+// 新增或修改拼团地址
+export function pink_edit(data) {
+	return request({
+		url: '/api/address/pink_edit',
+		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
+	});
+}

+ 18 - 0
api/category.js

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

+ 43 - 0
api/commission.js

@@ -0,0 +1,43 @@
+import request from '@/utils/request'
+
+export function commission_list(data) {
+	return request({
+		url: '/api/spread/commission',
+		method: 'get',
+		data
+	});
+}
+
+// 获取佣金详细记录
+export function commission(data) {
+	return request({
+		url: '/api/commission',
+		method: 'get',
+		data
+	});
+}
+
+export function commission_count(data) {
+	return request({
+		url: '/api/company/finance/commission_count',
+		method: 'get',
+		data
+	});
+}
+//提现
+export function apply(data) {
+	return request({
+		url: '/api/company/finance/apply',
+		method: 'get',
+		data
+	});
+}
+//提现提交
+export function applysave(data) {
+	return request({
+		url: '/api/company/finance/applysave',
+		method: 'get',
+		data
+	});
+}
+

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

+ 56 - 0
api/groupBooking.js

@@ -0,0 +1,56 @@
+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
+	});
+}
+
+// 获取接龙商品列表
+export function KlonList(data) {
+	return request({
+		url: '/api/jl/list',
+		method: 'get',
+		data
+	});
+}
+
+// 获取接龙商品详情
+export function KlonDetail(data, id) {
+	return request({
+		url: '/api/jl/detail/' + id,
+		method: 'get',
+		data
+	});
+}
+

+ 36 - 0
api/index.js

@@ -0,0 +1,36 @@
+import request from '@/utils/request'
+
+// 促销商品
+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
+	});
+}
+

+ 11 - 0
api/integral.js

@@ -0,0 +1,11 @@
+import request from '@/utils/request'
+
+//	积分列表
+export function integrallist(data) {
+	return request({
+		url: '/api/integral/list',
+		method: 'get',
+		data
+	});
+}
+

+ 55 - 0
api/login.js

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

+ 38 - 0
api/money.js

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

+ 19 - 0
api/notice.js

@@ -0,0 +1,19 @@
+import request from '@/utils/request'
+
+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
+	});
+}
+
+
+

+ 142 - 0
api/order.js

@@ -0,0 +1,142 @@
+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 nowPinkLst(data) {
+	return request({
+		url: '/api/combination/is_now_pink_lst',
+		method: 'get',
+		data
+	});
+}
+
+
+// 团长其他团
+export function pinkTAllList(data, id) {
+	return request({
+		url: '/api/combination/pinkT_all_list/' + id,
+		method: 'get',
+		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 orderMake(data,orderid) {
+	return request({
+		url: '/api/pink/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 KlonDetail(data, id) {
+	return request({
+		url: '/api/jl/order/detail/' + id,
+		method: 'get',
+		data
+	});
+}
+
+// 改变数量 
+export function ChangeNum(data) {
+	return request({
+		url: '/api/cart/change_num',
+		method: 'post',
+		data
+	});
+}
+

+ 131 - 0
api/product.js

@@ -0,0 +1,131 @@
+import request from '@/utils/request'
+import store from '@/store';
+// 获取商品列表
+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 new Promise((resolve, reject) => {
+		request({
+			url: '/api/cart/add',
+			method: 'post',
+			data
+		}).then((e) => {
+			resolve(e)
+		}).catch((e) => {
+			reject(e);
+			if (e.message == '请选择配送地址') {
+				uni.showModal({
+					title: "您尚未定位是否马上定位?",
+					success: (e) => {
+						if (e.confirm) {
+							//修改地址为可查看
+							store.commit('upAddressPageShow');
+							uni.navigateTo({
+								url: '/pages/index/address'
+							})
+						}
+					}
+				})
+			}
+		});
+	})
+}
+
+// 收藏商品
+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
+	});
+}
+
+// 一键拼团
+export function autoPink(data) {
+	return request({
+		url: '/api/order/auto/pink',
+		method: 'post',
+		data
+	});
+}
+
+// 团长拼团订单列表
+export function pinkT_list(data) {
+	return request({
+		url: '/api/order/pinkT_list',
+		method: 'get',
+		data
+	});
+}

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

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

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

+ 27 - 0
api/set.js

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

+ 27 - 0
api/sign.js

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

+ 36 - 0
api/team.js

@@ -0,0 +1,36 @@
+import request from '@/utils/request'
+
+export function spread_people(data) {
+	return request({
+		url: '/api/spread/people',
+		method: 'post',
+		data
+	});
+}
+
+// 推广订单详细
+export function order(data) {
+	return request({
+		url: '/api/spread/order',
+		method: 'post',
+		data
+	});
+}
+
+// 推广订单数据
+export function orderCount(data) {
+	return request({
+		url: '/api/spread/order/count',
+		method: 'post',
+		data
+	});
+}
+
+// 拼团订单
+export function orderPink(data) {
+	return request({
+		url: '/api/spread/order/pink',
+		method: 'post',
+		data
+	});
+}

+ 50 - 0
api/user.js

@@ -0,0 +1,50 @@
+import request from '@/utils/request'
+
+// 订单统计信息
+export function orderData(data) {
+	return request({
+		url: '/api/order/data',
+		method: 'get',
+		data
+	});
+}
+//获取邀请人列表
+export function spread_people(data) {
+	return request({
+		url: '/api/spread/people',
+		method: 'post',
+		data
+	});
+}
+//充值美卡
+export function recharge(data) {
+	return request({
+		url: '/api/level/recharge',
+		method: 'post',
+		data
+	});
+}
+//是否有免费领取赠品就会
+export function allow(data) {
+	return request({
+		url: '/api/gift/allow',
+		method: 'get',
+		data
+	});
+}
+//赠品列表
+export function list(data) {
+	return request({
+		url: '/api/gift/list',
+		method: 'get',
+		data
+	});
+}
+//领取赠品
+export function send(data) {
+	return request({
+		url: '/api/gift/send',
+		method: 'post',
+		data
+	});
+}

+ 106 - 0
api/wallet.js

@@ -0,0 +1,106 @@
+import request from '@/utils/request'
+
+// 获取用户消费记录
+export function spreadCommission(data,type) {
+	return request({
+		url: '/api/spread/commission/'+type,
+		method: 'get',
+		data
+	});
+}
+
+// 获取账户余额
+export function userBalance(data) {
+	return request({
+		url: '/api/user/balance',
+		method: 'get',
+		data
+	});
+}
+
+// 提现
+export function extractCash(data) {
+	return request({
+		url: '/api/extract/cash',
+		method: 'post',
+		data
+	});
+}
+
+// 提现信息
+export function extractBank(data) {
+	return request({
+		url: '/api/extract/bank',
+		method: 'get',
+		data
+	});
+}
+
+// 充值
+export function rechargeWechat(data) {
+	return request({
+		url: '/api/recharge/wechat',
+		method: 'post',
+		data
+	});
+}
+// 获取提现支付宝账号
+export function aliInfo(data) {
+	return request({
+		url: '/api/ali/info',
+		method: 'get',
+		data
+	});
+}
+//获取默认银行卡账号
+export function bankInfo(data) {
+	return request({
+		url: '/api/bank/info',
+		method: 'get',
+		data
+	});
+}
+// 保存提现支付宝账号
+export function setAliInfo(data) {
+	return request({
+		url: '/api/ali/edit',
+		method: 'post',
+		data
+	});
+}
+//保存默认银行卡账号
+export function setBankInfo(data) {
+	return request({
+		url: '/api/bank/edit',
+		method: 'post',
+		data
+	});
+}
+//积分记录
+export function integral(data) {
+	return request({
+		url: '/api/integral/list',
+		method: 'GET',
+		data
+	});
+}
+//记录
+export function spread_commission(data,id) {
+	return request({
+		url: '/api/spread/commission/'+id,
+		method: 'GET',
+		data
+	});
+}
+//记录
+export function turnOut(data) {
+	return request({
+		url: '/api/user/do',
+		method: 'GET',
+		data
+	});
+}
+
+
+
+

+ 37 - 0
api/wx.js

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

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


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

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

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

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

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

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

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

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

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

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

+ 502 - 0
components/gbro-marquee/marquee.vue

@@ -0,0 +1,502 @@
+
+<template>
+	<view class="marquee_box" @touchstart='touchstartFn' @touchend='touchendFn'>
+		<view class="" v-if="direction=='right'||direction=='left'">
+			<view v-if="broadcastType=='text'" class="marquee_container" :style="'background:'+broadcastStylees.back_color+';'">
+				<view v-if="broadcastIconIsDisplay" class="broadIcon" :style="'background:'+broadcastStylees.back_color+';font-size:28rpx;'">
+					<text class="iconfont icon-guangbozheng-"></text>
+					<text style="margin-left:12rpx;">{{broadcast_tit}}:</text>
+				</view>
+				<view class="boradcast_text_left_rig" :class='[direction=="left"?"marquee_text_left":direction=="right"?"marquee_text_right":"",animation_paused?"animation_pausedcss":""]'
+				 :style="'--marqueeWidth--:'+(-broadcastStylees.width_mal)+'px;--speed--:'+broadcastStylees.time+'s;width:'+broadcastStylees.width_mal+'px;'">
+					<view v-for="(item,index) in broadcastDataes" @click.stop="click_event(index)" :key="index" :style="'color:'+broadcastStylees.text_color+';margin-left:'+(index!=0?item.starspos:0)+'px;font-size:'+broadcastStylees.font_size+'rpx;'">
+						{{item.text}}
+					</view>
+				</view>
+			</view>
+			<view v-if="broadcastType=='mould'" class="mould">
+				<view class="" style="width: 100%;position: relative;overflow: hidden;" :style="'height:'+viewHeight+'rpx;'">
+					<view id="widthBox" class="broadcastTopBtm dsf" :class="[direction=='left'?'broadcastDataTopBtmDatacss_let':direction=='right'?'broadcastDataTopBtmDatacss_rig':'',animation_paused?'animation_pausedcss':'']"
+					 :style="styleWidth">
+						<view class="bml01" style="display: flex;justify-content: space-between;">
+							<view v-for="(item, index) in groupBookingList" :key="index" class="floor-item">
+								<image class="list-image" :src="item.image"></image>
+								<view class="tpl-box">
+									<image mode="scaleToFill" src="https://shicai.liuniu946.com/img/img063.png"></image>
+									<view class="price-list flex">
+										<view class="out-price">¥{{ item.ot_price }}</view>
+										<view class="xianprice">
+											<text>¥{{ item.price }}</text>
+										</view>
+									</view>
+								</view>
+							</view>
+						</view>
+						<view class="bml02" style="display: flex;justify-content: space-between;">
+							<view v-for="(item, index) in groupBookingList" :key="index" class="floor-item">
+								<image class="list-image" :src="item.image"></image>
+								<view class="tpl-box">
+									<image mode="scaleToFill" src="https://shicai.liuniu946.com/img/img063.png"></image>
+									<view class="price-list flex">
+										<view class="out-price">¥{{ item.ot_price }}</view>
+										<view class="xianprice">
+											<text>¥{{ item.price }}</text>
+										</view>
+									</view>
+								</view>
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+		<view v-if="direction=='top'||direction=='bottom'" class="broadcastTopBtm" :style="'font-size:'+broadcastStyle.font_size+'rpx;color:'+broadcastStyle.text_color+';background:'+broadcastStyle.back_color+';height:'+viewHeight+'rpx;--scrollHeight--:'+(-broadcastTopBtmHeight/2)+'px;--scrollSpeed--:'+(broadcastTopBtmHeight/2)/broadcastStyle.speed+'s;'">
+			<view v-if="broadcastType=='text'" :class="[direction=='top'?'broadcastDataTopBtmDatacss_top':direction=='bottom'?'broadcastDataTopBtmDatacss_bottom':'',animation_paused?'animation_pausedcss':'']">
+				<view v-for="(item,index) in broadcastDataTopBtmDataes"
+				 :key="index"
+				  @click.stop="click_event(index)"
+					class="bdbd_item">
+					<!-- {{item}} -->
+				</view>
+			</view>
+			<view v-if="broadcastType=='mould'" :class="[direction=='top'?'broadcastDataTopBtmDatacss_top':direction=='bottom'?'broadcastDataTopBtmDatacss_bottom':'',animation_paused?'animation_pausedcss':'']">
+				<view class="">
+					<slot />
+				</view>
+				<view class="">
+					<slot />
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+<script>
+	/**
+	 * author:G.bro
+	 * date:20200513
+	 * * **/
+	export default {
+		data() {
+			return {
+				broadcastDataes: [],
+				broadcastDataTopBtmDataes: [],
+				broadcastStylees: {},
+				broadcastTopBtmHeight: 0,
+				scrlloWidth: 0,
+				animation_paused: false,
+				qualifications:true,
+				styleWidth:''
+			}
+		},
+		props: {
+			groupBookingList:{
+				default:function  () {
+					return []
+				}
+			},
+			broadcastType: {
+				type: String,
+				default: 'text' //mould
+			},
+			// broadcastDataTopBtmData: {
+			// 	type: Array
+			// },
+			broadcastData: {
+				type: Array
+			},
+			broadcastStyle: {
+				type: Object,
+				default () {
+					return {
+						speed: 90, //滚动速度,每秒3个字
+						font_size: "28", //字体大小(rpx)
+						text_color: "#fff", //字体颜色
+						back_color: "#815CD4", //背景色
+
+					}
+				}
+			},
+			broadcastIconIsDisplay: { //图标是否显示
+				type: Boolean,
+				default: false
+			},
+			// broadcast_icon: {
+			// 	type: String,
+			// 	default: ''
+			// },
+			broadcast_tit: {
+				type: String,
+				default: '今日热点'
+			},
+			direction: {
+				type: String,
+				default: 'left'
+			},
+			viewHeight: {
+				type: Number,
+				default: 200
+			},
+			touchEvent: {
+				type: true,
+				default: false
+			}
+
+		},
+		comments: {
+		},
+		created() {
+			if (this.broadcastType == "text") {
+				if (this.direction == "right" || this.direction == "left") {
+					this.initial_let_rig();
+				} else {
+					let arr = [...this.broadcastData];
+					arr = arr.concat(arr);
+					this.broadcastDataTopBtmDataes = arr;
+				}
+			}
+		},
+		mounted() {},
+		methods: {
+			getBoxWidth(){
+				let that = this;
+				if (this.direction == "top" || this.direction == "bottom") {
+					const query2 = uni.createSelectorQuery().in(this)
+					query2.select('.broadcastDataTopBtmDatacss_' + this.direction).boundingClientRect(rect => {
+						that.broadcastTopBtmHeight = rect.height;
+						if(that.viewHeight-rect.height>10){
+							that.qualifications=false;
+							that.animation_paused = true;
+							that.broadcastDataTopBtmDataes.splice(that.broadcastDataTopBtmDataes.length/2,that.broadcastDataTopBtmDataes.length-1);
+						}
+						console.log(that.broadcastDataTopBtmDataes.length/2, 'that.surplusHeight')
+					}).exec()
+				}
+				if (this.direction == "left" || this.direction == "right") {
+					if (this.broadcastType == 'mould') {
+						const query = uni.createSelectorQuery().in(this)
+						query.select('.bml01').boundingClientRect(rect => {
+							console.log(rect);
+							that.scrlloWidth = +rect.width;
+							let styleWidth='--scrollWidth--:-'+that.scrlloWidth+'px;--scrollSpeed2--:'+that.scrlloWidth/that.broadcastStyle.speed+'s;width:'+that.scrlloWidth*2+'px;'
+							that.$set(that,'styleWidth',styleWidth);
+						}).exec()
+						query.select('.bml01').boundingClientRect(rect => {
+							console.log(rect);
+							that.scrlloWidth = +rect.width;
+							let styleWidth='--scrollWidth--:-'+that.scrlloWidth+'px;--scrollSpeed2--:'+that.scrlloWidth/that.broadcastStyle.speed+'s;width:'+that.scrlloWidth*2+'px;'
+							that.$set(that,'styleWidth',styleWidth);
+						}).exec()
+					}
+					// if(this.broadcastType=='text'){有偏差
+					// 	let assist = { ...this.broadcastStyle};
+					// 	const querys = uni.createSelectorQuery().in(this)
+					// 	querys.select('.boradcast_text_left_rig').boundingClientRect(rect => {
+					// 		assist.width_mal = rect.width;
+					// 			assist.time = rect.width/assist.speed;
+					// 			that.broadcastStylees=assist;
+					// 	}).exec()
+					// }
+				}
+			},
+			touchendFn(e) {
+				if (this.touchEvent&&this.qualifications) {
+					this.animation_paused = false;
+				}
+			},
+			touchstartFn(e) {
+				if (this.touchEvent&&this.qualifications) {
+					this.animation_paused = true;
+				}
+			},
+			initial_let_rig() {
+				let broadcastData = [...this.broadcastData];
+				console.log(this.direction, 'this.direction')
+				if (this.direction == "right") {
+					broadcastData.reverse();
+				}
+
+				let ititdata = broadcastData.map((item) => {
+						return {
+							"text": item,
+							"starspos": uni.getSystemInfoSync().windowWidth - 103
+						}
+					}),
+					assist = { ...this.broadcastStyle
+					},
+					this_width = 0,
+					spacing = 0,
+					speed = (assist.speed * assist.font_size); //m每秒行走的距离
+
+				for (let i in ititdata) {
+					this_width += ititdata[i].text.length * assist.font_size;
+					if (i != ititdata.length - 1) {
+						spacing += ititdata[i].starspos
+					}
+				}
+				let total_length = (this_width / 2) + spacing; //总长
+				assist.time = total_length / speed; /**滚动时间*/
+				assist.width_mal = total_length;
+				this.broadcastDataes = ititdata;
+				this.broadcastStylees = assist;
+			},
+			click_event(index){
+				let nub = this.broadcastDataTopBtmDataes.length/2;
+				let dataNub=0;
+				if(index>nub-1){
+					dataNub  = index -nub
+				}else{
+					dataNub = index;
+				}
+				
+				this.$emit("changeEvent",{dataNub,msg:`你点击了${index+1}条`});
+			}
+
+		}
+	}
+</script>
+
+<style lang="scss">
+	.tpl-box {
+		position: relative;
+		image {
+			width: 149rpx;
+			height: 33rpx;
+		}
+	}
+	.floor-item {
+		margin: 0rpx 25rpx;
+		.list-image {
+			width: 140rpx;
+			height: 140rpx;
+			border-radius: 15rpx;
+		}
+		.price-list {
+			font-size: 20rpx;
+			position: absolute;
+			top: 0;
+			left: 0;
+			width: 100%;
+			padding: 5rpx 10rpx;
+			line-height: 1;
+			height: 33rpx;
+			align-items: flex-end;
+			.out-price {
+				color: #b25e15;
+				text-decoration: line-through;
+				font-size: 17rpx;
+			}
+			.xianprice {
+				color: #ffffff;
+				font-size: 24rpx !important;
+				// padding-bottom: 5rpx;
+			}
+			.moneyIcon {
+				font-size: 17rpx;
+			}
+		}
+	}
+	/* page {
+		overflow: hidden;
+		width: 100%;
+	} */
+
+	.marquee_box {
+		width: 100%;
+		overflow: hidden;
+		position: inherit;
+		height: auto;
+	}
+
+	.mould {
+		width: 750rpx;
+		overflow: hidden;
+		position: inherit;
+	}
+
+	.dsf {
+		display: flex;
+		justify-content: space-between;
+	}
+
+	.broadIcon {
+		/* width: 60rpx; */
+		padding: 0 22rpx;
+		height: 60rpx;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		position: absolute;
+		left: 0;
+		top: 0;
+		color: #fff;
+		z-index: 999;
+		line-height: 60rpx;
+
+	}
+
+
+
+
+
+	.marquee_container {
+		position: relative;
+		width: 100%;
+		height: 60rpx;
+
+	}
+
+	.marquee_text_left {
+		display: flex;
+		white-space: nowrap;
+		animation-name: around_left;
+		animation-duration: var(--speed--);
+		animation-iteration-count: infinite;
+		animation-timing-function: linear;
+		line-height: 60rpx;
+		position: absolute;
+
+	}
+
+	@keyframes around_left {
+		from {
+			left: 100%;
+		}
+
+		to {
+			left: var(--marqueeWidth--);
+		}
+	}
+
+	.marquee_text_right {
+		display: flex;
+		white-space: nowrap;
+		animation-name: around_right;
+		animation-duration: var(--speed--);
+		animation-iteration-count: infinite;
+		animation-timing-function: linear;
+		line-height: 60rpx;
+		position: absolute;
+
+	}
+
+	@keyframes around_right {
+		from {
+			right: 100%;
+		}
+
+		to {
+			right: var(--marqueeWidth--);
+		}
+	}
+
+	.marquee_tit {
+		height: 60rpx;
+		line-height: 60rpx;
+
+	}
+
+	.broadcastTopBtm {
+		padding: 12rx;
+		overflow: hidden;
+		position: relative;
+	}
+
+	.broadcastDataTopBtmDatacss_top {
+		width: 100%;
+		animation-name: around_top;
+		animation-duration: var(--scrollSpeed--);
+		animation-iteration-count: infinite;
+		animation-timing-function: linear;
+		position: absolute;
+		left: 0;
+	}
+
+	@keyframes around_top {
+		from {
+			top: 0%;
+		}
+
+		to {
+			top: var(--scrollHeight--);
+		}
+	}
+
+	.broadcastDataTopBtmDatacss_bottom {
+		width: 100%;
+		animation-name: around_Bottom;
+		animation-duration: var(--scrollSpeed--);
+		animation-iteration-count: infinite;
+		animation-timing-function: linear;
+		position: absolute;
+		left: 0;
+	}
+
+	@keyframes around_Bottom {
+		from {
+			bottom: 0%;
+		}
+
+		to {
+			bottom: var(--scrollHeight--);
+		}
+	}
+
+	.broadcastDataTopBtmDatacss_let {
+		width: 100%;
+		animation-name: around_let;
+		animation-duration: var(--scrollSpeed2--);
+		animation-iteration-count: infinite;
+		animation-timing-function: linear;
+		position: absolute;
+		left: 0;
+		top: 0;
+	}
+
+	.animation_pausedcss {
+		animation-play-state: paused;
+	}
+
+	@keyframes around_let {
+		from {
+			left: 0%;
+		}
+
+		to {
+			left: var(--scrollWidth--);
+		}
+	}
+
+	.bdbd_item {
+		padding: 0 12rpx;
+		line-height: 60rpx;
+		overflow: hidden;
+		white-space: nowrap;
+		text-overflow: ellipsis;
+	}
+
+	@font-face {
+		font-family: "iconfont";
+		src: url('//at.alicdn.com/t/font_1686137_9el2ov99ag.eot?t=1589197045289');
+		/* IE9 */
+		src: url('//at.alicdn.com/t/font_1686137_9el2ov99ag.eot?t=1589197045289#iefix') format('embedded-opentype'),
+			/* IE6-IE8 */
+			url('data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAANIAAsAAAAAByAAAAL7AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCCcAqCJIIbATYCJAMICwYABCAFhG0HNxtIBhHVmxnIfiTYMS7bb8koPCedCeJJj2/e7iZfYqkjkZzk9lw0oCspm5uha1SEYUrOg//lO9IN4UL4FQBGHE6b4vPv8pzmojHnedQFGG8NaG9cCySQAgnMG8ZuIniA2yGAP8kUIg0ateiALwbQTwAZMXRwX3wLLgzGifoi2A1TDbIKC1+1WF0CVvLvy0fKxRcUlgYkthnUcAB13sA47XgOPSgBwXIGwJkFGigEDEiHRlMrtAwVovGPQoZ0OFa2wJs6nkf5h/3jgYDYgMxAABJ1/jMJsPBRMxUARq/vB7iTzgYmPjQ5vv+S6E4b/P2XXBBxLwYELI3pvDFm/XqMs27QknXgrK82yepoddiXOXTJhi3NTe/e7XznTqcNG7ZujLoN2Drexulwy99hXacl0UZCzNW77p1WfV52MOpyx+O3nVuFt1qs+xziN+DL8Q0BU2N17J84FTs1YMOXE/2dXf8DTwV62/5bne0/dmdranzv25uGonfvtepore/p0pXugqw9N2SpuKsuTSuYO7vtjzV1oka1azMqsm50/SYtYxvHNug6blqbRuGpQccDpjYpGzCwauyCmnETJpadjJjwO6teaETz1uHNQjPqfmhPHQC8q/q2Lvj3vyF17cvZvUOqvvkGGAAePO36jTu8q4ZhFvC9Q7PAnxYMzDOxCKjUI/MNs6JfzoECneta8QC2cJ5MVUe9VkzwJerlLD4kZdD4kkk01EJYBFAJG19q4U8BjWcHEME4NGL8gHzmaxBCOQlFMBehCeUy0VAfwyKaz7AJFQ1/OknEkgFki5dUfUYt6MD8IFnaPdKKEtk3DFfVnBdx2gv5TF4Yu6EcXXFHXmLE+Q6TiAfPtMGi7Ya1EhxMGa10UeSY+943XamztDWK+oxa0IH5QbK0e1pcVOXzNwxX1dyRM+J8IZ+pcRi7YQBxle+Dch5ln/MdJhEPnmmDRTNghSGCo7lTRitdnBA45t4o5IfKu+2V298tAfwBGiWwuSZo8KX3YOgfkRnbpgEA') format('woff2'),
+			url('//at.alicdn.com/t/font_1686137_9el2ov99ag.woff?t=1589197045289') format('woff'),
+			url('//at.alicdn.com/t/font_1686137_9el2ov99ag.ttf?t=1589197045289') format('truetype'),
+			/* chrome, firefox, opera, Safari, Android, iOS 4.2+ */
+			url('//at.alicdn.com/t/font_1686137_9el2ov99ag.svg?t=1589197045289#iconfont') format('svg');
+		/* iOS 4.1- */
+	}
+
+	.iconfont {
+		font-family: "iconfont" !important;
+		font-size: 16px;
+		font-style: normal;
+		-webkit-font-smoothing: antialiased;
+		-moz-osx-font-smoothing: grayscale;
+	}
+
+	.icon-guangbozheng-:before {
+		content: "\e640";
+	}
+</style>

+ 196 - 0
components/share.vue

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

+ 226 - 0
components/upload-images.vue

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

+ 44 - 0
main.js

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

+ 121 - 0
manifest.json

@@ -0,0 +1,121 @@
+{
+    "name" : "美天选菜",
+    "appid" : "__UNI__F0EBD91",
+    "description" : "",
+    "versionName" : "1.0.0",
+    "versionCode" : "100",
+    "transformPx" : false,
+    "app-plus" : {
+        /* 5+App特有相关 */
+        "usingComponents" : true,
+        "splashscreen" : {
+            "alwaysShowBeforeRender" : true,
+            "waiting" : true,
+            "autoclose" : true,
+            "delay" : 0
+        },
+        "modules" : {},
+        /* 模块配置 */
+        "distribute" : {
+            /* 应用发布信息 */
+            "android" : {
+                /* android打包配置 */
+                "permissions" : [
+                    "<uses-feature android:name=\"android.hardware.camera\"/>",
+                    "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
+                    "<uses-permission android:name=\"android.permission.CALL_PHONE\"/>",
+                    "<uses-permission android:name=\"android.permission.CAMERA\"/>",
+                    "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
+                    "<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
+                    "<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>",
+                    "<uses-permission android:name=\"android.permission.READ_CONTACTS\"/>",
+                    "<uses-permission android:name=\"android.permission.RECORD_AUDIO\"/>",
+                    "<uses-permission android:name=\"android.permission.VIBRATE\"/>",
+                    "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
+                    "<uses-permission android:name=\"android.permission.WRITE_CONTACTS\"/>"
+                ]
+            },
+            "ios" : {},
+            /* ios打包配置 */
+            "sdkConfigs" : {
+                "maps" : {}
+            }
+        },
+        "uniStatistics" : {
+            "enable" : false
+        }
+    },
+    /* SDK配置 */
+    "quickapp" : {},
+    /* 快应用特有相关 */
+    "mp-weixin" : {
+        /* 小程序特有相关 */
+        "usingComponents" : true,
+        "appid" : "wxd16074dd9fb12856",
+        "setting" : {
+            "urlCheck" : true,
+            "es6" : true
+        },
+        "permission" : {
+            "scope.userLocation" : {
+                "desc" : "你的位置信息将用于定位"
+            }
+        },
+        "uniStatistics" : {
+            "enable" : false
+        }
+    },
+    "h5" : {
+        "title" : "十菜",
+        "domain" : "",
+        "router" : {
+            "base" : "/index/",
+            "mode" : "hash"
+        },
+        "devServer" : {
+            "port" : 8080, //端口号
+            "disableHostCheck" : true,
+            "proxy" : {
+                "/ws/" : {
+                    "target" : "http://apis.map.qq.com/ws/", //目标接口域名
+                    "changeOrigin" : true, //是否跨域
+                    "secure" : false // 设置支持https协议的代理
+                }
+            }
+        },
+        "sdkConfigs" : {
+            "maps" : {
+                "qqmap" : {
+                    "key" : "VYZBZ-P2TRG-RMIQ3-ITAIN-2DKBK-CKFQQ"
+                }
+            }
+        },
+        "uniStatistics" : {
+            "enable" : false
+        }
+    },
+    "uniStatistics" : {
+        "enable" : false
+    },
+    "mp-alipay" : {
+        "uniStatistics" : {
+            "enable" : false
+        }
+    },
+    "mp-baidu" : {
+        "uniStatistics" : {
+            "enable" : false
+        }
+    },
+    "mp-qq" : {
+        "uniStatistics" : {
+            "enable" : false
+        }
+    },
+    "mp-toutiao" : {
+        "uniStatistics" : {
+            "enable" : false
+        }
+    }
+}

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

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

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


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

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

+ 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=="
+    }
+  }
+}

+ 656 - 0
pages.json

@@ -0,0 +1,656 @@
+{
+	"pages": [
+		{
+			"path": "pages/index/index",
+			"style": {
+				"navigationBarTextStyle":"black",
+				"navigationBarTitleText": "美天选菜",
+				"enablePullDownRefresh": true,
+				"onReachBottomDistance":50,
+				"app-plus": {
+					"titleNView":false
+				}
+			}
+		}, {
+			"path": "pages/public/register",
+			"style": {
+				"navigationBarTitleText": "注册",
+				"app-plus": {
+					"titleNView": {
+						"type": "transparent"
+					}
+				}
+			}
+		},
+		{
+			"path": "pages/product/Gift",
+			"style": {
+				"navigationBarTitleText": "赠品列表"
+			}
+		},
+		{
+			"path": "pages/set/phone",
+			"style": {
+				"navigationBarTitleText": "手机号绑定"
+			}
+		},
+		{
+			"path": "pages/public/login",
+			"style": {
+				"navigationBarTitleText": "登录",
+				"app-plus": {
+					"titleNView": {
+						"type": "transparent"
+					}
+				}
+			}
+		},
+		{
+			"path": "pages/index/address",
+			"style": {
+				"navigationBarTitleText": "选择收货地址"
+				// "app-plus": {
+				// 	"titleNView": {
+				// 		"buttons": [{
+				// 			"text": "新增地址",
+				// 			"color": "#2DBD59",
+				// 			"fontSize": "28rpx"
+				// 		}]
+				// 	}
+				// }
+			}
+		}, 
+		{
+			"path": "pages/public/wxLogin",
+			"style": {
+				"navigationBarTitleText": "微信登录",
+				"app-plus": {
+					"titleNView": {
+						"type": "none"
+					}
+				}
+			}
+		},
+		{
+			"path": "pages/public/forget",
+			"style": {
+				"navigationBarTitleText": "忘记密码",
+				"app-plus": {
+					"titleNView": {
+						"type": "transparent"
+					}
+				}
+			}
+		},
+		{
+			"path": "pages/public/agreement",
+			"style": {
+				"navigationBarTitleText": "服务协议"
+			}
+		},
+		{
+			"path": "pages/index/returned",
+			"style": {
+				"navigationBarTitleText": "退换货问题"
+			}
+		},
+		{
+			"path": "pages/public/privacy",
+			"style": {
+				"navigationBarTitleText": "隐私协议"
+			}
+		},
+		{
+			"path": "pages/set/set",
+			"style": {
+				"navigationBarTitleText": "设置"
+			}
+		},
+		{
+			"path": "pages/set/password",
+			"style": {
+				"navigationBarTitleText": "修改密码"
+			}
+		},
+		{
+			"path": "pages/team/team",
+			"style": {
+				"navigationBarTitleText": "我的邀请人"
+			}
+		},
+		{
+			"path": "pages/userinfo/userinfo",
+			"style": {
+				"navigationBarTitleText": "修改资料"
+			}
+		}, 
+		{
+			"path": "pages/cart/cart",
+			"style": {
+				"enablePullDownRefresh": true,
+				"navigationBarTitleText": "购物车"
+			}
+		},
+		{
+			"path": "pages/product/picked",
+			"style": {
+				"enablePullDownRefresh": true,
+				"navigationBarTitleText": "拼团详情"
+			}
+		},
+		{
+			"path": "pages/activity/listFri",
+			"style": {
+				"enablePullDownRefresh": true,
+				"navigationBarTitleText": "活动专题"
+			}
+		},
+		{
+			"path": "pages/activity/listOne",
+			"style": {
+				"enablePullDownRefresh": true,
+				"navigationBarTitleText": "活动专题"
+			}
+		},
+		{
+			"path": "pages/activity/listSen",
+			"style": {
+				"enablePullDownRefresh": true,
+				"navigationBarTitleText": "活动专题"
+			}
+		},
+		
+		{
+			"path": "pages/scoreAccumulate/scoreAccumulate",
+			"style": {
+				"navigationBarTitleText": "积分明细"
+			}
+		},
+		{
+			"path": "pages/user/user",
+			"style": {
+				// #ifndef MP-WEIXIN
+				"navigationStyle": "custom",
+				// #endif
+				"navigationBarTitleText": "个人中心"
+			}
+		}, {
+			"path": "pages/detail/detail",
+			"style": {
+				"navigationBarTitleText": "",
+				"app-plus": {
+					"titleNView": {
+						"type": "transparent"
+					}
+				}
+			}
+		},
+		{
+			"path": "pages/user/member",
+			"style": {
+				"navigationBarTitleText": "开通美卡"
+			}
+		},
+		{
+			"path": "pages/user/renew",
+			"style": {
+				"navigationBarTitleText": "我的美卡"
+			}
+		},
+		{
+			"path": "pages/service/service",
+			"style": {
+				"navigationBarTitleText": "客服"
+			}
+		},
+		{
+			"path": "pages/user/card",
+			"style": {
+				"navigationBarTitleText": "美卡"
+			}
+		},
+		{
+			"path": "pages/product/product",
+			"style": {
+				"navigationBarTitleText": "详情展示",
+				"app-plus": {
+					"titleNView": {
+						"type": "transparent"
+					}
+				}
+			}
+		}, 
+		{
+			"path": "pages/product/productGroup",
+			"style": {
+				"navigationBarTitleText": "拼团详情展示",
+				"app-plus": {
+					"titleNView": {
+						"type": "transparent"
+					}
+				}
+			}
+		}, 
+		{
+			"path": "pages/product/reply",
+			"style": {
+				"enablePullDownRefresh": true,
+				"navigationBarTitleText": "商品评论"
+			}
+		}, 
+		{
+			"path": "pages/order/order",
+			"style": {
+				"enablePullDownRefresh": true,
+				"navigationBarTitleText": "我的订单",
+				"app-plus": {
+					"bounce": "none"
+				}
+			}
+		}, {
+			"path": "pages/order/orderDetail",
+			"style": {
+				"navigationBarTitleText": "订单详情",
+				"app-plus": {
+					"bounce": "none"
+				}
+			}
+		}, {
+			"path": "pages/order/orderRefund",
+			"style": {
+				"navigationBarTitleText": "申请退款"
+			}
+		}, {
+			"path": "pages/order/createOrder",
+			"style": {
+				"navigationBarTitleText": "创建订单"
+			}
+		}, 
+		{
+			"path": "pages/order/createOrderPink",	// 参团进入
+			"style": {
+				"navigationBarTitleText": "提交订单"
+			}
+		},
+		{
+			"path": "pages/order/createOrderKai",		// 开团进入
+			"style": {
+				"navigationBarTitleText": "创建订单"
+			}
+		},
+		{
+			"path": "pages/order/evaluate",
+			"style": {
+				"navigationBarTitleText": "评论"
+			}
+		},
+		{
+			"path": "pages/address/address",
+			"style": {
+				"navigationBarTitleText": "收货地址"
+			}
+		}, {
+			"path": "pages/address/addressManage",
+			"style": {
+				"navigationBarTitleText": "新增收货地址"
+			}
+		}, 
+		{
+			"path": "pages/address/addressPink",
+			"style": {
+				"navigationBarTitleText": "拼团地址"
+			}
+		}, {
+			"path": "pages/address/addPinkManage",
+			"style": {
+				"navigationBarTitleText": "新增拼团地址"
+			}
+		},
+		{
+			"path": "pages/money/pay",
+			"style": {
+				"navigationBarTitleText": "支付"
+			}
+		},
+		{
+			"path": "pages/money/paySuccess",
+			"style": {
+				"navigationBarTitleText": "支付成功"
+			}
+		}, {
+			"path": "pages/notice/notice",
+			"style": {
+				"enablePullDownRefresh": true,
+				"navigationBarTitleText": "通知"
+			}
+		},
+		{
+			"path": "pages/notice/details",
+			"style": {
+				"navigationBarTitleText": "通知详情"
+			}
+		}, 
+		{
+			"path": "pages/notice/poster",
+			"style": {
+				"navigationBarTitleText": "海报详情"
+			}
+		}, 
+		{
+			"path": "pages/category/category",
+			"style": {
+				"enablePullDownRefresh": true,
+				"navigationBarTitleText": "分类"
+			}
+		}, {
+			"path": "pages/product/list",
+			"style": {
+				"enablePullDownRefresh": true,
+				"navigationBarTitleText": "商品列表"
+			}
+		},
+		{
+			"path": "pages/product/search",
+			"style": {
+				"enablePullDownRefresh": true,
+				// #ifdef APP-PLUS
+				"navigationStyle": "custom",
+				// #endif
+				// #ifndef MP || APP-PLUS
+				"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/product/classify",
+			"style": {
+				"navigationStyle": "custom",
+				"app-plus": {
+					"titleNView": {
+						"type": "transparent"
+					}
+				}
+			}
+		},
+		{
+			"path": "pages/wallet/wallet",
+			"style": {
+				"navigationBarTitleText": "我的钱包",
+				"app-plus": {
+					"titleNView": {
+						"type": "transparent"
+					}
+				}
+			}
+		},
+		{
+			"path": "pages/commission/commission",
+			"style": {
+				"navigationBarTitleText": "我的佣金",
+				"app-plus": {
+					"titleNView": {
+						"type": "transparent"
+					}
+				}
+			}
+		},
+		{
+			"path": "pages/commission/order",
+			"style": {
+				"navigationBarTitleText": "推广订单"
+			}
+		},
+		{
+			"path": "pages/commission/orderGroup",
+			"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": {
+				"enablePullDownRefresh": true,
+				"navigationBarTitleText": "收藏夹"
+			}
+		}, {
+			"path": "pages/coupon/coupon",
+			"style": {
+				"navigationBarTitleText": "我的卡包"
+			}
+		}, 
+		{
+			"path": "pages/coupon/getcoupon",
+			"style": {
+				"navigationBarTitleText": "领取优惠券"
+			}
+		}, 
+	
+		{
+			"path": "pages/sign/index",
+			"style": {
+				"navigationBarTitleText": "每日签到",
+				"app-plus": {
+					"titleNView": {
+						"type": "transparent"
+					}
+				}
+			}
+		},
+		{
+			"path": "pages/redirect/redirect",
+			"style": {
+				"navigationBarTitleText": "微信登录跳转页面",
+				"app-plus": {
+					"titleNView": false
+				}
+			}
+		},
+		{
+			"path": "pages/shareQrCode/index",
+			"style": {
+				"enablePullDownRefresh": true,
+				"navigationBarTitleText": "邀请好友",
+				"permission": {
+				   "scope.writePhotosAlbum": {
+				     "desc": "是否保存到保存到相册"
+				   }
+				 }
+			}
+		},
+		{
+			"path": "pages/seckill/seckill",
+			"style": {
+				"enablePullDownRefresh": true,
+				"navigationBarTitleText": "今日秒杀"
+			}
+		},
+		{
+			"path": "pages/groupBooking/index",
+			"style": {
+				"enablePullDownRefresh": true,
+				"navigationBarTitleText": "超值拼团"
+			}
+		},
+	
+		{
+			"path": "pages/groupBooking/detail",
+			"style": {
+				"navigationBarTitleText": "拼团详细",
+				"app-plus": {
+					"titleNView": {
+						"type": "transparent"
+					}
+				}
+			}
+		},
+			{
+			"path": "pages/groupBooking/suborder",
+			"style": {
+				"navigationBarTitleText": "提交订单"
+			}
+		},
+		{
+			"path": "pages/groupBooking/inviteImg",
+			"style": {
+				"navigationBarTitleText": "拼团邀请图",
+				"app-plus": {
+					"titleNView": false
+				}
+			}
+		},
+		{
+			"path": "pages/groupBooking/groupdetails",
+			"style": {
+				"navigationBarTitleText": "拼团详情",
+				"app-plus": {
+					"titleNView": false
+				}
+			}
+		},
+		{
+			"path": "pages/product/groupdetails",		// AA团一键开团
+			"style": {
+				"navigationBarTitleText": "拼团详情",
+				"app-plus": {
+					"titleNView": false
+				}
+			}
+		},
+		{
+			"path": "pages/rule/AAjiangjin",
+			"style": {
+				"navigationBarTitleText": "AA团开团奖金"
+			}
+		},
+		{
+			"path": "pages/rule/AArule",
+			"style": {
+				"navigationBarTitleText": "AA团玩法规则"
+			}
+		},
+		{
+			"path": "pages/rule/DaRjiangjin",
+			"style": {
+				"navigationBarTitleText": "达人团团长佣金"
+			}
+		},
+		{
+			"path": "pages/rule/DaRrule",
+			"style": {
+				"navigationBarTitleText": "达人团玩法规则"
+			}
+		},
+		{
+			"path": "pages/rule/Pickrule",
+			"style": {
+				"navigationBarTitleText": "用户自提协议"
+			}
+		},
+		{
+			"path": "pages/groupBooking/klondike",
+			"style": {
+				"navigationBarTitleText": "接龙团"
+			}
+		},
+		{
+			"path": "pages/product/productKlon",		// 接龙商品
+			"style": {
+				"navigationBarTitleText": "接龙详情展示"
+			}
+		},
+		{
+			"path": "pages/order/createOrderKlon",		// 接龙商品
+			"style": {
+				"navigationBarTitleText": "创建订单"
+			}
+		},
+		{
+			"path": "pages/order/orderKlonDetail",		// 接龙商品
+			"style": {
+				"navigationBarTitleText": "订单详情"
+			}
+		},
+		{
+			"path": "pages/groupBooking/video",
+			"style": {
+				"navigationBarTitleText": "视频教程"
+			}
+		}
+		
+	],
+	"globalStyle": {
+		"navigationBarTextStyle": "black",
+		"navigationBarTitleText": "uni-app",
+		"navigationBarBackgroundColor": "#FFFFFF",
+		"backgroundColor": "#f8f8f8"
+	},
+	"tabBar": {
+		"color": "#C0C4CC",
+		"selectedColor": "#5DBC7C",
+		"iconWidth":"18px",
+		"borderStyle": "black",
+		"backgroundColor": "#ffffff",
+		"list": [{
+				"pagePath": "pages/index/index",
+				"iconPath": "static/tabBar/tab-home.png",
+				"selectedIconPath": "static/tabBar/tab-home-current.png",
+				"text": "首页"
+			},
+			{
+				"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": "我的"
+			}
+		]
+	}
+}

+ 352 - 0
pages/activity/listFri.vue

@@ -0,0 +1,352 @@
+<template>
+	<view class="container">
+			<view class="top-img"><image :src="img" mode='widthFix'></image></view>
+		<view id="list-box" class="list-box" :style="{ height: swiperHeight + 'px' }">
+			<view class="guess-section">
+				<view v-for="(item, index) in list" :key="index" class="guess-item" @click="navToDetailPage(item)">
+					<view class="image-wrapper"><image :src="item.image" mode="scaleToFill"></image></view>
+					<view class="stock  margin-c-20 flex_item">
+						<image class="img" src="/static/img/img56.png" mode="scaleToFill"></image>
+						<view class="stock-num ">库存剩{{ item.percent * 100 }}%</view>
+					</view>
+					<text class="title clamp margin-c-20">{{ item.store_name }}</text>
+					<view class="list-tip">
+						<view class="info margin-c-20">{{ item.store_info }}</view>
+						<view class="tipBox margin-c-20">
+							<view class="tipsl" v-if="item.keyword != ''">
+								<text v-for="lss in item.keyword">{{ lss }}</text>
+							</view>
+						</view>
+					</view>
+					<view class="price margin-c-20 flex">
+						<view class="price_list">
+							<view class="price-red">¥{{ item.price }}</view>
+							<view class="price-green">¥{{ item.ot_price }}</view>
+						</view>
+						<view class="img position-relative" @click.stop="Addcar(item)">
+							<image src="/static/img/img21.png"></image>
+							<view class="corner" v-if="item.cart_num > 0">
+								<text>{{item.cart_num}}</text>
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+<script>
+import { getProducts } from '@/api/product.js';
+import { category_layer } from '@/api/category.js';
+import { cartAdd } from '@/api/product.js';
+import { saveUrl } from '@/utils/loginUtils.js';
+export default {
+	data() {
+		return {
+			list: '',//三级分类商品
+			cid:'',//二级分类id
+			img:'',//二级封面图
+			swiperHeight: 0,
+		};
+	},
+	watch:{
+		// 初次加载页面高度时修改页面高度
+		bastList(newValue, oldValue) {
+			let obj = this;
+			let bHeight = Math.ceil(newValue.length / 2);
+			obj.$nextTick(function() {
+				uni.createSelectorQuery()
+					.select('#list-box')
+					.fields(
+						{
+							size: true
+						},
+						function(data) {
+							obj.pageProportion = data.width/750;
+							obj.swiperHeight = Math.ceil(obj.pageProportion * 300 * bHeight);
+						}
+					)
+					.exec();
+			});
+		}
+	},
+	onLoad(option) {
+		this.cid = option.type;
+		// 判断有无邀请人
+		if (option.spread) {
+			uni.setStorageSync('spread', option.spread);
+		}
+		saveUrl();
+		this.GetDate();
+	},
+	onShow() {
+		this.GetDate();
+	},
+	//下拉刷新
+	onPullDownRefresh() {
+		let obj = this;
+		//监听下拉刷新动作的执行方法,每次手动下拉刷新都会执行一次
+		setTimeout(function() {
+			obj.loadData();
+			uni.stopPullDownRefresh(); //停止下拉刷新动画
+		}, 1000);
+	},
+	methods: {
+		// 载入二级分类数据
+		async GetDate() {
+			let obj = this;
+			obj.loading = true;
+			category_layer({
+				pid: 102
+			})
+				.then(({ data }) => {
+					for (let i = 0; i < data.list.length; i++) { 
+					      if(obj.cid == data.list[i].id){
+							  obj.img = data.list[i].pic;
+						  }
+					}
+					this.loadData();
+				})
+				.catch(err => {
+					console.log(err);
+				});
+		},
+		//分享
+		// #ifdef MP
+		onShareAppMessage: function(res) {
+			let userInfo = uni.getStorageSync('userInfo');
+			let GetInfo = uni.getStorageSync('GetInfo');
+			// 来自页面内分享按钮
+			let pages = getCurrentPages();
+			// 获取当前页面
+			let page = pages[pages.length - 1];
+			let path = '/pages/activity/listFri?type=105&';
+			// 保存邀请人
+			path += 'spread=' + userInfo.uid;
+			let data = {
+				path: path,
+				imageUrl: GetInfo.img,
+				title: GetInfo.title
+			};
+			console.log(data)
+			return data;
+		},
+		// #endif
+		// 请求商品列表
+		loadData() {
+			let obj = this;
+			getProducts({
+				sid:obj.cid,
+				type:1
+			})
+				.then(({ data }) => {
+					this.list = data;
+				})
+				.catch(e => {});
+		},
+		//加入购物车
+		Addcar(item) {
+			let obj = this;
+			cartAdd({
+				cartNum: '1', //商品数量
+				uniqueId:'', //商品标签
+				new: 0, //商品是否新增加到购物车1为不加入0为加入
+				mer_id: '',
+				productId: item.id//商品编号
+			})
+				.then(function(e) {
+					uni.showToast({
+						title: '成功加入购物车',
+						type: 'top',
+						duration: 500,
+						icon: 'none'
+					});
+					obj.loadData();
+				})
+				.catch(e => {
+					console.log(e);
+				});
+		},
+		//跳转商品详情页
+		navToDetailPage(item) {
+			let id = item.id;
+			uni.navigateTo({
+				url: '/pages/product/product?id=' + id
+			});
+		},
+	}
+};
+</script>
+<style lang="scss">
+	page{
+		background: #FFFFFF;
+		height: 100%;
+	}
+	.container{
+		height: 100%;
+		background: #FFFFFF;
+	}
+	.top-img {
+			width: 100%;
+			image{
+				width: 100%;
+				height: auto;
+				/* min-height: 2900px; */
+			}
+		}
+	.top-name{
+		width: 92%;
+		margin: 25rpx auto;
+		background: #E9F5EF;
+		color: #18B358;
+		border-top-left-radius: 25rpx;
+		border-top-right-radius: 25rpx;
+		text-align: center;
+		font-size: 32rpx;
+		font-weight: bold;
+		padding: 25rpx 0rpx;
+	}
+	/*公用边框样式*/
+	%icon {
+		margin-right: 10rpx;
+		display: inline-block;
+		padding: 2rpx 10rpx;
+		border: 1rpx solid $color-yellow;
+		color: $color-yellow;
+		line-height: 1;
+		font-size: $font-base;
+		border-radius: 10rpx;
+	}
+	/* 猜你喜欢 */
+	.guess-section {
+		display: flex;
+		flex-wrap: wrap;
+		padding-left: 15rpx;
+		.guess-item {
+			overflow: hidden;
+			display: flex;
+			flex-direction: column;
+			width: 31.5%;
+			margin-bottom: 1.5%;
+			border-radius: $border-radius-sm;
+			background-color: white;
+			// box-shadow: $box-shadow;
+			padding-bottom: 30rpx;
+			border: 2rpx solid #F5F5F5;
+			&:nth-child(n + 1) {
+				margin-right: 1.5%;
+			}
+		}
+		.image-wrapper {
+			width: 100%;
+			height: 200rpx;
+			border-radius: 3px;
+			overflow: hidden;
+			margin-bottom: 15rpx;
+			image {
+				width: 100%;
+				height: 100%;
+				opacity: 1;
+			}
+		}
+		.title {
+			font-size: $font-base;
+			color: $font-color-dark;
+			padding-top: 10rpx;
+		}
+		.list-tip{
+			height: 80rpx;
+			.info {
+				color: #999999;
+				font-size: 22rpx;
+			}
+			.tipBox{
+				.tipsl {
+					text {
+						border: 2rpx solid #ff1a27;
+						color: #ff1a27;
+						border-radius: 5rpx;
+						font-size: 18rpx;
+						padding: 2rpx 5rpx;
+						margin-right: 15rpx;
+					}
+				}
+			}
+		}
+		.stock{
+				font-size: 26rpx;
+				background:linear-gradient(90deg,rgba(255,3,95,1),rgba(255,153,14,1));
+				width:85%;
+				color: #FFFFFF;
+				border-radius: 10rpx;
+				margin-top: 15rpx;
+				padding-left: 15rpx;
+				.img {
+					width: 20rpx;
+					height: 20rpx;
+					flex-shrink: 0;
+				}
+				.stock-num {
+					padding-left: 7rpx;
+					font-size: 22rpx;
+					border-radius: 5rpx;
+					height: 26rpx;
+					line-height: 26rpx;
+				}
+			} 
+		.price {
+			font-size: 28rpx;
+			// padding-top: 25rpx;
+			.price_list {
+				.price-red {
+					color: #ff1a27;
+					font-weight: bold;
+					font-size: 32rpx !important;
+					// padding-bottom: 15rpx;
+					text {
+						color: #9699a0;
+						font-size: 24rpx !important;
+						font-weight: normal;
+						padding: 0rpx 10rpx;
+					}
+				}
+				.price-green {
+					color: #A8ACB0;
+					font-size: 28rpx !important;
+					text-decoration: line-through;
+					text {
+						background: #2dbd59;
+						color: #ffffff;
+						padding: 0rpx 10rpx;
+						border-radius: 5rpx;
+						font-size: 22rpx !important;
+						margin-left: 15rpx;
+					}
+				}
+			}
+			.img {
+				width: 50rpx;
+				height: 50rpx;
+				image {
+					width: 100%;
+					height: 100%;
+				}
+			}
+		}
+	
+		.icon {
+			@extend %icon;
+		}
+	
+		.detail {
+			line-height: 1;
+		}
+		.tip {
+			color: white;
+			background-color: $color-yellow;
+			line-height: 1.5;
+			font-size: $font-sm;
+			padding-left: 20rpx;
+		}
+	}
+</style>

+ 307 - 0
pages/activity/listOne.vue

@@ -0,0 +1,307 @@
+<template>
+	<view class="container">
+		<view class="top-img"><image :src="img" mode='widthFix'></image></view>
+		<view class="preferred_centent">
+			<view class="flex_item preferred_item" v-for="ls in list" @click="navToDetailPage(ls)">
+				<view class="tlist-img">
+					<view class="goods_image"><image :src="ls.image"></image></view>
+					<view class="stock flex_item" v-if="ls.stock > 0">
+						<image class="img" src="/static/img/img56.png" mode="scaleToFill"></image>
+						<view class="stock-num clamp">库存剩{{ ls.percent * 100 }}%</view>
+					</view>
+				</view>
+				<view class="goods_name">
+					<view class="goods_title clamp">{{ ls.store_name }}</view>
+					<view class="guess-list">
+						<view class="goods_num clamp">{{ ls.store_info }}</view>
+						<view class="tipBox">
+							<view class="tipsl" v-if="ls.keyword != ''">
+								<text v-for="lss in ls.keyword">{{ lss }}</text>
+							</view>
+						</view>
+					</view>
+					<view class="price flex">
+						<view class="price_list">
+							<view class="price-red">
+								¥{{ ls.price }}<text>/份</text>
+								<text class="tip">¥{{ ls.ot_price }}</text>
+							</view>
+						</view>
+						<view class="img position-relative" @click.stop="Addcar(ls)">
+							<image src="/static/img/img21.png"></image>
+							<view class="corner" v-if="ls.cart_num > 0">
+								<text>{{ ls.cart_num }}</text>
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+<script>
+import { getProducts } from '@/api/product.js';
+import { category_layer } from '@/api/category.js';
+import { cartAdd } from '@/api/product.js';
+import { saveUrl } from '@/utils/loginUtils.js';
+export default {
+	data() {
+		return {
+			list: '',//三级分类商品
+			cid:'',//二级分类id
+			img:'',//二级封面图
+		};
+	},
+	onLoad(option) {
+		this.cid = option.type;
+		// 判断有无邀请人
+		if (option.spread) {
+			uni.setStorageSync('spread', option.spread);
+		}
+		saveUrl();
+		this.GetDate();
+	},
+	onshow(){
+		this.loadData();
+	},
+	//下拉刷新
+	onPullDownRefresh() {
+		let obj = this;
+		//监听下拉刷新动作的执行方法,每次手动下拉刷新都会执行一次
+		setTimeout(function() {
+			obj.loadData();
+			uni.stopPullDownRefresh(); //停止下拉刷新动画
+		}, 1000);
+	},
+	methods: {
+		// 载入二级分类数据
+		async GetDate() {
+			let obj = this;
+			obj.loading = true;
+			category_layer({
+				pid: 102
+			})
+				.then(({ data }) => {
+					for (let i = 0; i < data.list.length; i++) { 
+					      if(obj.cid == data.list[i].id){
+							  obj.img = data.list[i].pic;
+						  }
+					}
+					this.loadData();
+				})
+				.catch(err => {
+					console.log(err);
+				});
+		},
+		// 请求商品列表
+		loadData() {
+			let obj = this;
+			getProducts({
+				sid:obj.cid,
+				type:1
+			})
+				.then(({ data }) => {
+					this.list = data;
+				})
+				.catch(e => {});
+		},
+		//分享
+		// #ifdef MP
+		onShareAppMessage: function(res) {
+			let userInfo = uni.getStorageSync('userInfo');
+			let GetInfo = uni.getStorageSync('GetInfo');
+			// 来自页面内分享按钮
+			let pages = getCurrentPages();
+			// 获取当前页面
+			let page = pages[pages.length - 1];
+			let path = '/pages/activity/listOne?type=103&';
+			// 保存邀请人
+			path += 'spread=' + userInfo.uid;
+			let data = {
+				path: path,
+				imageUrl: GetInfo.img,
+				title: GetInfo.title
+			};
+			console.log(data)
+			return data;
+		},
+		// #endif
+		//加入购物车
+		Addcar(item) {
+			let obj = this;
+			cartAdd({
+				cartNum: '1', //商品数量
+				uniqueId: '', //商品标签
+				new: 0, //商品是否新增加到购物车1为不加入0为加入
+				mer_id: '',
+				productId: item.id //商品编号
+			})
+				.then(function(e) {
+					uni.showToast({
+						title: '成功加入购物车',
+						type: 'top',
+						duration: 500,
+						icon: 'none'
+					});
+					obj.loadData();
+				})
+				.catch(e => {
+					console.log(e);
+				});
+		},
+		//跳转商品详情页
+		navToDetailPage(ls) {
+			let id = ls.id;
+			uni.navigateTo({
+				url: '/pages/product/product?id=' + id
+			});
+		}
+	}
+};
+</script>
+<style lang="scss">
+page {
+		min-height: 100%;
+		background-color: #FFFFFF;
+		width: 100%;
+	}
+.container {
+	background: #ffffff;
+	// height: 100%;
+}
+image{
+		width: 100%;
+		height: auto;
+		/* min-height: 2900px; */
+	}
+.top-img {
+		width: 100%;
+		image{
+			width: 100%;
+			height: auto;
+			/* min-height: 2900px; */
+		}
+	}
+.preferred_centent {
+	width: 100%;
+	padding: 0rpx 25rpx;
+	.preferred_item {
+		width: 100%;
+		height: 100%;
+		border-top: 1px solid #f0f0f0;
+		padding: 25rpx 0rpx;
+		position: relative;
+		.tlist-img {
+			width:180rpx;
+			height:200rpx ;
+			position: relative;
+			.goods_image {
+				width: 180rpx;
+				height: 180rpx;
+				image {
+					width: 180rpx;
+					height: 180rpx;
+				}
+			}
+			.stock {
+				margin-top: 13rpx;
+				font-size: 26rpx;
+				background:linear-gradient(90deg,rgba(255,3,95,1),rgba(255,153,14,1));
+				width: 100%;
+				color: #FFFFFF;
+				border-radius: 10rpx;
+				justify-content: center;
+				align-items: center;
+				position: absolute;
+				left: 0;
+				bottom: 0;
+				.img {
+					width: 20rpx;
+					height: 20rpx;
+					flex-shrink: 0;
+				}
+				.stock-num {
+					padding-left: 7rpx;
+					font-size: 22rpx;
+					border-radius: 5rpx;
+					height: 26rpx;
+					line-height: 26rpx;
+				}
+			}
+		}
+		
+		.goods_name {
+			padding-left: 25rpx;
+			width: 65%;
+			padding-right: 30rpx;
+			.goods_title {
+				white-space: nowrap;
+				overflow: hidden;
+				text-overflow: ellipsis;
+				font-size: 32rpx;
+				color: $font-color-dark;
+			}
+			.guess-list{
+				height: 70rpx;
+				.goods_num {
+					font-size: 24rpx;
+					color: #8f8f97;
+				}
+				.tipBox{
+					// padding-bottom: 8rpx;
+					.tipsl {
+						text {
+							border: 2rpx solid #ff1a27;
+							color: #ff1a27;
+							border-radius: 5rpx;
+							font-size: 18rpx;
+							padding: 2rpx 5rpx;
+							margin-right: 15rpx;
+						}
+					}
+				}
+			}
+			.price {
+				font-size: 28rpx;
+				padding-top: 40rpx;
+				.price_list {
+					.price-red {
+						color: #ff1a27;
+						font-weight: bold;
+						font-size: 34rpx !important;
+						text {
+							color: #9699a0;
+							font-size: 24rpx !important;
+							font-weight: normal;
+							padding: 0rpx 10rpx;
+						}
+						.tip{
+							text-decoration: line-through;
+						}
+					}
+					.price-green {
+						color: #2dbd59;
+						font-size: 28rpx !important;
+						text {
+							background: #2dbd59;
+							color: #ffffff;
+							padding: 0rpx 10rpx;
+							border-radius: 5rpx;
+							font-size: 22rpx !important;
+							margin-left: 15rpx;
+						}
+					}
+				}
+				.img {
+					width: 50rpx;
+					height: 50rpx;
+					image {
+						width: 100%;
+						height: 100%;
+					}
+				}
+			}
+		}
+	}
+}
+</style>

+ 352 - 0
pages/activity/listSen.vue

@@ -0,0 +1,352 @@
+<template>
+	<view class="container">
+			<view class="top-img"><image :src="img" mode='widthFix'></image></view>
+		<view id="list-box" class="list-box" :style="{ height: swiperHeight + 'px' }">
+			<view class="guess-section">
+				<view v-for="(item, index) in list" :key="index" class="guess-item" @click="navToDetailPage(item)">
+					<view class="image-wrapper"><image :src="item.image" mode="scaleToFill"></image></view>
+					<view class="stock  margin-c-20 flex_item">
+						<image class="img" src="/static/img/img56.png" mode="scaleToFill"></image>
+						<view class="stock-num ">库存剩{{ item.percent * 100 }}%</view>
+					</view>
+					<text class="title clamp margin-c-20">{{ item.store_name }}</text>
+					<view class="list-tip">
+						<view class="info clamp margin-c-20">{{ item.store_info }}</view>
+						<view class="tipBox margin-c-20">
+							<view class="tipsl" v-if="item.keyword != ''">
+								<text v-for="lss in item.keyword">{{ lss }}</text>
+							</view>
+						</view>
+					</view>
+					<view class="price margin-c-20 flex">
+						<view class="price_list">
+							<view class="price-red">
+								¥{{ item.price }}<text>/份</text>
+								<text class="tiplist">¥{{ item.ot_price }}</text>
+							</view>
+						</view>
+						<view class="img position-relative" @click.stop="Addcar(item)">
+							<image src="/static/img/img21.png"></image>
+							<view class="corner" v-if="item.cart_num > 0">
+								<text>{{item.cart_num}}</text>
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+<script>
+import { getProducts } from '@/api/product.js';
+import { category_layer } from '@/api/category.js';
+import { cartAdd } from '@/api/product.js';
+import { saveUrl } from '@/utils/loginUtils.js';
+export default {
+	data() {
+		return {
+			list: '',//三级分类商品
+			cid:'',//二级分类id
+			img:'',//二级封面图
+			swiperHeight: 0,
+		};
+	},
+	watch:{
+		// 初次加载页面高度时修改页面高度
+		bastList(newValue, oldValue) {
+			let obj = this;
+			let bHeight = Math.ceil(newValue.length / 2);
+			obj.$nextTick(function() {
+				uni.createSelectorQuery()
+					.select('#list-box')
+					.fields(
+						{
+							size: true
+						},
+						function(data) {
+							obj.pageProportion = data.width/750;
+							obj.swiperHeight = Math.ceil(obj.pageProportion * 520 * bHeight);
+						}
+					)
+					.exec();
+			});
+		}
+	},
+	onLoad(option) {
+		this.cid = option.type;
+		// 判断有无邀请人
+		if (option.spread) {
+			uni.setStorageSync('spread', option.spread);
+		}
+		saveUrl();
+		this.GetDate();
+	},
+	onShow() {
+		this.loadData();
+	},
+	//下拉刷新
+	onPullDownRefresh() {
+		let obj = this;
+		//监听下拉刷新动作的执行方法,每次手动下拉刷新都会执行一次
+		setTimeout(function() {
+			obj.loadData();
+			uni.stopPullDownRefresh(); //停止下拉刷新动画
+		}, 1000);
+	},
+	methods: {
+		// 载入二级分类数据
+		async GetDate() {
+			let obj = this;
+			obj.loading = true;
+			category_layer({
+				pid: 102
+			})
+				.then(({ data }) => {
+					for (let i = 0; i < data.list.length; i++) { 
+					      if(obj.cid == data.list[i].id){
+							  obj.img = data.list[i].pic;
+						  }
+					}
+					this.loadData();
+				})
+				.catch(err => {
+					console.log(err);
+				});
+		},
+		// 请求商品列表
+		loadData() {
+			let obj = this;
+			getProducts({
+				sid:obj.cid,
+				type:1
+			})
+				.then(({ data }) => {
+					this.list = data;
+				})
+				.catch(e => {});
+		},
+		//分享
+		// #ifdef MP
+		onShareAppMessage: function(res) {
+			let userInfo = uni.getStorageSync('userInfo');
+			let GetInfo = uni.getStorageSync('GetInfo');
+			// 来自页面内分享按钮
+			let pages = getCurrentPages();
+			// 获取当前页面
+			let page = pages[pages.length - 1];
+			let path = '/pages/activity/listSen?type=104&';
+			// 保存邀请人
+			path += 'spread=' + userInfo.uid;
+			let data = {
+				path: path,
+				imageUrl: GetInfo.img,
+				title: GetInfo.title
+			};
+			console.log(data)
+			return data;
+		},
+		// #endif
+		//加入购物车
+		Addcar(item) {
+			let obj = this;
+			cartAdd({
+				cartNum: '1', //商品数量
+				uniqueId:'', //商品标签
+				new: 0, //商品是否新增加到购物车1为不加入0为加入
+				mer_id: '',
+				productId: item.id//商品编号
+			})
+				.then(function(e) {
+					uni.showToast({
+						title: '成功加入购物车',
+						type: 'top',
+						duration: 500,
+						icon: 'none'
+					});
+					obj.loadData();
+				})
+				.catch(e => {
+					console.log(e);
+				});
+		},
+		//跳转商品详情页
+		navToDetailPage(item) {
+			let id = item.id;
+			uni.navigateTo({
+				url: '/pages/product/product?id=' + id
+			});
+		},
+	}
+};
+</script>
+<style lang="scss">
+	page{
+		background: #F5F5F5;
+		height: 100%;
+	}
+	.container{
+		height: 100%;
+	}
+	.top-img {
+			width: 100%;
+			image{
+				width: 100%;
+				height: auto;
+				/* min-height: 2900px; */
+			}
+		}
+	.top-name{
+		width: 92%;
+		margin: 25rpx auto;
+		background: #E9F5EF;
+		color: #18B358;
+		border-top-left-radius: 25rpx;
+		border-top-right-radius: 25rpx;
+		text-align: center;
+		font-size: 32rpx;
+		font-weight: bold;
+		padding: 25rpx 0rpx;
+	}
+	/*公用边框样式*/
+	%icon {
+		margin-right: 10rpx;
+		display: inline-block;
+		padding: 2rpx 10rpx;
+		border: 1rpx solid $color-yellow;
+		color: $color-yellow;
+		line-height: 1;
+		font-size: $font-base;
+		border-radius: 10rpx;
+	}
+	/* 猜你喜欢 */
+	.guess-section {
+		display: flex;
+		flex-wrap: wrap;
+		padding: 0 30rpx;
+		.guess-item {
+			overflow: hidden;
+			display: flex;
+			flex-direction: column;
+			width: 48%;
+			margin-bottom: 4%;
+			border-radius: $border-radius-sm;
+			background-color: white;
+			box-shadow: $box-shadow;
+			padding-bottom: 30rpx;
+			&:nth-child(2n + 1) {
+				margin-right: 4%;
+			}
+		}
+		.image-wrapper {
+			width: 100%;
+			height: 330rpx;
+			border-radius: 3px;
+			overflow: hidden;
+			margin-bottom: 15rpx;
+			image {
+				width: 100%;
+				height: 100%;
+				opacity: 1;
+			}
+		}
+		.title {
+			font-size: $font-base;
+			color: $font-color-dark;
+		}
+		.list-tip{
+			height: 80rpx;
+			.info {
+				color: #999999;
+				font-size: 22rpx;
+			}
+			.tipBox{
+				.tipsl {
+					text {
+						border: 2rpx solid #ff1a27;
+						color: #ff1a27;
+						border-radius: 5rpx;
+						font-size: 18rpx;
+						padding: 2rpx 5rpx;
+						margin-right: 15rpx;
+					}
+				}
+			}
+		}
+		.stock {
+				font-size: 26rpx;
+				background:linear-gradient(90deg,rgba(255,3,95,1),rgba(255,153,14,1));
+				width:65%;
+				color: #FFFFFF;
+				border-radius: 10rpx;
+				margin-top: 15rpx;
+				padding-left: 15rpx;
+				.img {
+					width: 20rpx;
+					height: 20rpx;
+					flex-shrink: 0;
+				}
+				.stock-num {
+					padding-left: 7rpx;
+					font-size: 22rpx;
+					border-radius: 5rpx;
+					height: 26rpx;
+					line-height: 26rpx;
+				}
+			}
+		.price {
+			font-size: 28rpx;
+			.price_list {
+				.price-red {
+					color: #ff1a27;
+					font-weight: bold;
+					font-size: 32rpx !important;
+					// padding-bottom: 15rpx;
+					text {
+						color: #9699a0;
+						font-size: 24rpx !important;
+						font-weight: normal;
+						padding: 0rpx 10rpx;
+					}
+					.tiplist{
+						text-decoration: line-through;
+					}
+				}
+				.price-green {
+					color: #2dbd59;
+					font-size: 28rpx !important;
+					text {
+						background: #2dbd59;
+						color: #ffffff;
+						padding: 0rpx 10rpx;
+						border-radius: 5rpx;
+						font-size: 22rpx !important;
+						margin-left: 15rpx;
+					}
+				}
+			}
+			.img {
+				width: 50rpx;
+				height: 50rpx;
+				image {
+					width: 100%;
+					height: 100%;
+				}
+			}
+		}
+	
+		.icon {
+			@extend %icon;
+		}
+	
+		.detail {
+			line-height: 1;
+		}
+		.tip {
+			color: white;
+			background-color: $color-yellow;
+			line-height: 1.5;
+			font-size: $font-sm;
+			padding-left: 20rpx;
+		}
+	}
+</style>

+ 309 - 0
pages/address/addPinkManage.vue

@@ -0,0 +1,309 @@
+<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 { pink_edit } 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);
+
+			this.addressData = {
+				name: data.real_name,
+				mobile: data.phone,
+				address: {
+					province: data.province,
+					city: data.city,
+					district: data.district
+				},
+				area: data.detail,
+				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;
+			openMap().then(() => {
+				   uni.hideLoading();
+					uni.getLocation({
+						type: 'gcj02',
+						success(e) {
+							uni.chooseLocation({
+								latitude: e.latitude,
+								longitude: e.longitude,
+								success(e) {
+									obj.addressLocation = e;
+								},
+								fail(e) {
+									uni.showModal({
+										title:'地址选择错误',
+										content:JSON.parse(e)
+									})
+									console.log(e);
+								}
+							});
+						},fail(e) {
+							uni.showModal({
+								title:'定位错误',
+								content:JSON.parse(e)
+							})
+						}
+					});
+				})
+				.catch(e => {
+					uni.hideLoading();
+					uni.showModal({
+						title: '提示',
+						content: '您未授权无法调用地图定位功能!',
+						showCancel: false
+					});
+				});
+		},
+		// 选中城市切换
+		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[3|4|5|7|8][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;
+			}
+			//this.$api.prePage()获取上一页实例,可直接调用上页所有数据和方法,在App.vue定义
+			pink_edit({
+				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>

+ 208 - 0
pages/address/address.vue

@@ -0,0 +1,208 @@
+<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,setAddressDefault,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
+			setAddressDefault({
+				id: data.id
+			}).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;
+	background-color: $page-color-base;
+}
+.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>

+ 309 - 0
pages/address/addressManage.vue

@@ -0,0 +1,309 @@
+<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);
+
+			this.addressData = {
+				name: data.real_name,
+				mobile: data.phone,
+				address: {
+					province: data.province,
+					city: data.city,
+					district: data.district
+				},
+				area: data.detail,
+				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;
+			openMap().then(() => {
+				   uni.hideLoading();
+					uni.getLocation({
+						type: 'gcj02',
+						success(e) {
+							uni.chooseLocation({
+								latitude: e.latitude,
+								longitude: e.longitude,
+								success(e) {
+									obj.addressLocation = e;
+								},
+								fail(e) {
+									uni.showModal({
+										title:'地址选择错误',
+										content:JSON.parse(e)
+									})
+									console.log(e);
+								}
+							});
+						},fail(e) {
+							uni.showModal({
+								title:'定位错误',
+								content:JSON.parse(e)
+							})
+						}
+					});
+				})
+				.catch(e => {
+					uni.hideLoading();
+					uni.showModal({
+						title: '提示',
+						content: '您未授权无法调用地图定位功能!',
+						showCancel: false
+					});
+				});
+		},
+		// 选中城市切换
+		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[3|4|5|7|8][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;
+			}
+			//this.$api.prePage()获取上一页实例,可直接调用上页所有数据和方法,在App.vue定义
+			addressEdit({
+				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>

+ 209 - 0
pages/address/addressPink.vue

@@ -0,0 +1,209 @@
+<template>
+	<view class="content b-t">
+		<view class="list" v-if="addressList.real_name">
+			<view class="wrapper">
+				<view class="address-box">
+					<text class="name">{{ addressList.real_name }}</text>
+					<text class="mobile">{{ addressList.phone }}</text>
+				</view>
+				<view class="u-box">
+					<text class="address">{{ addressList.province + addressList.city + addressList.district }} {{ addressList.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', addressList)">
+						<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 v-if="!addressList.real_name" class="add-btn" @click="addAddress('add')">新增拼团地址</button>
+	</view>
+</template>
+
+<script>
+import { pinkAddress } from '@/api/address.js';
+export default {
+	data() {
+		return {
+			source: 0,
+			addressList: {}
+		};
+	},
+	onLoad(option) {
+		this.source = option.source||0
+		this.loadAddress();
+	},
+	methods: {
+		// 加载地址
+		loadAddress() {
+			pinkAddress({
+				page: 1,
+				limit: 100
+			}).then(({ data }) => {
+				console.log(data,9654)
+				this.addressList = data;
+			});
+		},
+		// 设为默认地址
+		defaultUp(data,ind) {
+			this.addressList=this.addressList.map((e) => {
+				e.is_default=0
+				return e
+			})
+			this.addressList[ind].is_default=1
+			setAddressDefault({
+				id: data.id
+			}).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/addPinkManage?type=${type}&data=${JSON.stringify(item)}`
+			});
+		},
+		//添加或修改成功之后回调
+		refreshList() {
+			// 重新加载地址
+			this.loadAddress()
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+page {
+	padding-bottom: 120rpx;
+	padding-top: 20rpx;
+	background-color: $page-color-base;
+}
+.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>

+ 868 - 0
pages/cart/cart.vue

@@ -0,0 +1,868 @@
+<template>
+	<view class="container">
+		<!-- 空白页 -->
+		<view v-if="!hasLogin" class="empty">
+			<image src="/static/error/emptyCart.png" class="emptyImg" mode="aspectFit"></image>
+			<view class="empty-tips">
+				空空如也
+				<view class="navigator" @click="navToLogin">去登陆></view>
+			</view>
+		</view>
+		<view v-if="hasLogin">
+			<!-- 列表 -->
+			<view class="coupon flex" @click="Getcoupon" v-if="showCart == true">
+				<view class="tip red">优惠券</view>
+				<view class="tip">优惠券详情见活动页面</view>
+				<view class="tip green flex">
+					<view>更多优惠</view>
+					<view class="iconfont iconenter"></view>
+				</view>
+			</view>
+			<view class="emptyCart" v-if="showCart == false">
+				<view class="empty-img"><image src="/static/error/emptyCart.png"></image></view>
+				<view class="empty-text">
+					空空如也,
+					<text @click="ToCategory">随便逛逛</text>
+				</view>
+			</view>
+			<view class="cart-list">
+				<view v-for="(item, index) in cartList" :key="index" 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">
+						<view class="flex">
+							<text class="clamp title">{{ item.productInfo.store_name }}</text>
+							<text class="del-btn iconfont iconclose" @click="deleteCartItem(item, 1)"></text>
+						</view>
+						<text class="attr">{{ item.attr_val }}</text>
+						<view class="flex">
+							<view class="price">¥{{ item.productInfo.price }}</view>
+							<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"
+								:key="item.id"
+								:disabled="true"
+								@eventChange="numberChange"
+							></uni-number-box>
+						</view>
+					</view>
+				</view>
+			</view>
+			<view class="guess-name" v-if="invalList.length > 0">
+				<view class="img"><image src="../../static/img/img13.png"></image></view>
+				<view class="name">失效商品</view>
+			</view>
+			<view class="cart-list">
+				<view v-for="(item, ind) in invalList" :key="item.id" class="cart-item" :class="{ 'b-b': ind !== invalList.length - 1 }">
+					<view class="image-wrapper"><image :src="item.productInfo.image" mode="aspectFill"></image></view>
+					<view class="meng">已失效</view>
+					<view class="item-right">
+						<view class="flex">
+							<text class="clamp title">{{ item.productInfo.store_name }}</text>
+							<text class="del-btn iconfont iconclose" @click="deleteCartItem(item, 2)"></text>
+						</view>
+						<text class="attr">{{ item.attr_val }}</text>
+						<view class="flex">
+							<view class="price">¥{{ item.productInfo.price }}</view>
+						</view>
+					</view>
+				</view>
+			</view>
+			<view v-if="Guesslist.length > 0">
+				<view class="guess-name">
+					<view class="img"><image src="../../static/img/img13.png"></image></view>
+					<view class="name">猜你喜欢</view>
+				</view>
+				<view id="list-box" class="list-box" :style="{ height: swiperHeight + 'px' }">
+					<view class="guess-section">
+						<view v-for="(item, index) in Guesslist" :key="index" class="guess-item" @click="ToDetail(item)">
+							<view class="imagewrapper"><image :src="item.image"></image></view>
+							<view class="guess-list">
+								<text class="title clamp margin-c-20">{{ item.store_name }}</text>
+								<view class="info clamp margin-c-20">{{ item.store_info }}</view>
+								<view class="tipBox margin-c-20">
+									<view class="tipsl" v-if="item.keyword != ''">
+										<text v-for="lss in item.keyword">{{ lss }}</text>
+									</view>
+								</view>
+							</view>
+							<view class="price margin-c-20 flex">
+								<view class="price_list">
+									<view class="price-red">
+										¥{{ item.price }}
+										<text>/份</text>
+									</view>
+									<view class="price-green">
+										¥{{ item.ot_price }}
+										<text>市场价</text>
+									</view>
+								</view>
+								<view class="img position-relative" @click.stop="Addcar(item)">
+									<image src="/static/img/img21.png"></image>
+									<view class="corner" v-if="item.cart_num > 0">
+										<text>{{ item.cart_num }}</text>
+									</view>
+								</view>
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+			<!-- 底部菜单栏 -->
+			<view class="action-section" v-show="showCart">
+				<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>
+				</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 { getProducts } from '@/api/product.js';
+import { mapState } from 'vuex';
+import uniNumberBox from '@/components/uni-number-box.vue';
+import { saveUrl, interceptor } from '@/utils/loginUtils.js';
+import { cartAdd } from '@/api/product.js';
+export default {
+	components: {
+		uniNumberBox
+	},
+	data() {
+		return {
+			total: 0, //总价格
+			allChecked: false, //全选状态  true|false
+			showCart: false, //隐藏购物车数据
+			empty: false, //空白页现实  true|false
+			cartList: [], //购物车商品
+			swiperHeight: 0,
+			Guesslist: '', //猜你喜欢
+			invalList: '' //失效商品
+		};
+	},
+	onShow() {
+		// 只有登录时才加载数据
+		if (this.hasLogin) {
+			this.loadData();
+			this.Guess();
+		}
+	},
+	onLoad(option){
+		if (option.spread) {
+			uni.setStorageSync('spread', option.spread);
+		}
+		saveUrl();
+	},
+	watch: {
+		//显示空白页
+		cartList(e) {
+			let empty = e.length === 0 ? true : false;
+			if (this.empty !== empty) {
+				this.empty = empty;
+			}
+			if (e.length > 0) {
+				this.showCart = true;
+			}
+			if (e.length == 0) {
+				this.showCart = false;
+			}
+		},
+		// 初次加载页面高度时修改页面高度
+		Guesslist(newValue, oldValue) {
+			let obj = this;
+			let bHeight = Math.ceil(newValue.length / 2);
+			obj.$nextTick(function() {
+				uni.createSelectorQuery()
+					.select('#list-box')
+					.fields(
+						{
+							size: true
+						},
+						function(data) {
+							obj.pageProportion = data.width / 750;
+							obj.swiperHeight = Math.ceil(obj.pageProportion * 620 * bHeight);
+						}
+					)
+					.exec();
+			});
+		}
+	},
+	computed: {
+		...mapState('user', ['hasLogin'])
+	},
+	//下拉刷新
+	onPullDownRefresh() {
+		let obj = this;
+		//监听下拉刷新动作的执行方法,每次手动下拉刷新都会执行一次
+		setTimeout(function() {
+			obj.loadData();
+			uni.stopPullDownRefresh(); //停止下拉刷新动画
+		}, 1000);
+	},
+	methods: {
+		//请求数据
+		async loadData() {
+			let obj = this;
+			getCartList({})
+				.then(function(e) {
+					obj.invalList = e.data.invalid;
+					// 获取当前购物车物品增加数量
+					let nub = obj.cartList.length;
+					// 获取之前对象数组
+					let aArray = obj.cartList.reverse();
+					// 获取返回数据对象数组
+					let bArray = e.data.valid.reverse();
+					// 处理数据缓存
+					let arr = bArray
+						.map((item, ind) => {
+							// 设置返回数据默认为勾选状态
+							item.checked = true;
+							// 获取相同数组之前对象的数据
+							let carlist = aArray[ind];
+							// 判断之前是否已经加载完毕
+							if (carlist && carlist.loaded == 'loaded') {
+								item.loaded = 'loaded';
+							}
+							return item;
+						})
+						.reverse();
+
+					obj.$set(obj, 'cartList', []);
+					obj.$nextTick(e => {
+						obj.$set(obj, 'cartList', arr);
+						obj.calcTotal(); //计算总价
+					});
+				})
+				.catch(function(e) {
+					console.log(e);
+				});
+		},
+		// #ifdef MP
+		onShareAppMessage: function(res) {
+			let userInfo = uni.getStorageSync('userInfo');
+			let GetInfo = uni.getStorageSync('GetInfo');
+			// 来自页面内分享按钮
+			let pages = getCurrentPages();
+			// 获取当前页面
+			let page = pages[pages.length - 1];
+			let path = '/pages/index/index?';
+			// 保存邀请人
+			path += 'spread=' + userInfo.uid;
+			let data = {
+				path: path,
+				imageUrl: GetInfo.img,
+				title: GetInfo.title
+			};
+			console.log(data)
+			return data;
+		},
+		// #endif
+		// 猜你喜欢
+		Guess() {
+			let obj = this;
+			getProducts({
+				page: 1,
+				limit: 10,
+				type: 1,
+				sid: 97 //分类id
+			})
+				.then(({ data }) => {
+					obj.Guesslist = data;
+				})
+				.catch(err => {
+					console.log(err);
+				});
+		},
+		//加入购物车
+		Addcar(item) {
+			let obj = this;
+			cartAdd({
+				cartNum: '1', //商品数量
+				uniqueId: '', //商品标签
+				new: 0, //商品是否新增加到购物车1为不加入0为加入
+				mer_id: '',
+				productId: item.id //商品编号
+			})
+				.then(function(e) {
+					uni.showToast({
+						title: '成功加入购物车',
+						type: 'top',
+						duration: 500,
+						icon: 'none'
+					});
+					obj.Guess();
+					obj.loadData();
+				})
+				.catch(e => {});
+		},
+		// 商品详情页
+		ToDetail(item) {
+			if (item.stock < 1) {
+				this.$api.msg('该商品已售罄');
+			} else {
+				uni.navigateTo({
+					url: `/pages/product/product?id=` + item.id
+				});
+			}
+		},
+		ToCategory() {
+			uni.switchTab({
+				url: `/pages/category/category`
+			});
+		},
+		//领取优惠券
+		Getcoupon() {
+			uni.navigateTo({
+				url: '/pages/coupon/getcoupon'
+			});
+		},
+		//监听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) {
+			console.log(data);
+			let arr = this.cartList[data.index];
+			arr.cart_num = data.number;
+			getCartNum({ id: arr.id, number: data.number })
+				.then(e => {})
+				.catch(function(e) {
+					console.log(e);
+				});
+			this.calcTotal();
+			this.Guess();
+		},
+		//删除
+		deleteCartItem(index, type) {
+			uni.showLoading({
+				title: '加载中'
+			});
+			let id = index.id;
+			let obj = this;
+			// if(type == 1){
+			// 	let list = this.cartList;
+			// 	let row = list[index];
+			// 	id = row.id;
+			// }else{
+			// 	let list = this.invalList;
+			// 	let row = list[index];
+			// 	id = row.id;
+			// }
+			// if(type == 1){
+			// 	this.cartList.splice(index, 1);
+			// 	this.calcTotal();
+			// }else{
+			// 	this.invalList.splice(index, 1);
+			// }
+			cartDel({
+				ids: id
+			})
+				.then(function(e) {
+					uni.hideLoading();
+					obj.loadData();
+					obj.calcTotal();
+					obj.Guess();
+				})
+				.catch(e => {
+					uni.hideLoading();
+					console.log(e.message);
+				});
+		},
+		//清空
+		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 = [];
+						this.Guess();
+					}
+				}
+			});
+		},
+		//计算总价
+		calcTotal() {
+			let list = this.cartList;
+			console.log(list, 7);
+			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(',')
+			});
+		},
+		//随便逛逛
+		Toindex() {
+			uni.switchTab({
+				url: '/pages/category/category'
+			});
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+.container {
+	padding-bottom: 134rpx;
+	background-color: $page-color-base;
+	.emptyCart {
+		position: relative;
+		width: 100%;
+		padding-top: 150rpx;
+		.empty-img {
+			width: 385rpx;
+			height: 300rpx;
+			margin: 0rpx auto;
+			image {
+				width: 100%;
+				height: 100%;
+			}
+		}
+		.empty-text {
+			text-align: center;
+			font-size: $font-sm + 2rpx;
+			color: $font-color-disabled;
+			margin-bottom: 100rpx;
+			text {
+				color: $uni-color-primary;
+			}
+		}
+	}
+	/* 空白页 */
+	.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;
+			}
+		}
+		.empty {
+			width: 100%;
+			height: 500rpx;
+		}
+	}
+}
+/* 购物车列表项 */
+.coupon {
+	width: 92%;
+	margin: 25rpx auto;
+	border-radius: 25rpx;
+	background: #ffffff;
+	font-size: 20rpx !important;
+	padding: 25rpx 15rpx;
+	.red {
+		background-color: #fe1212;
+		color: #ffffff;
+		line-height: 35rpx;
+		padding: 0rpx 20rpx;
+		border-radius: 25rpx;
+	}
+	.green {
+		color: #2dbd59;
+	}
+	.tip.green {
+		height: 30rpx;
+	}
+}
+.cart-list {
+	background: #ffffff;
+	width: 92%;
+	margin: 25rpx auto;
+	border-radius: 25rpx;
+	.cart-item {
+		display: flex;
+		position: relative;
+		padding: 30rpx 40rpx;
+		.image-wrapper {
+			width: 160rpx;
+			height: 160rpx;
+			flex-shrink: 0;
+			position: relative;
+			image {
+				border-radius: 8rpx;
+			}
+		}
+		.meng {
+			width: 160rpx;
+			height: 160rpx;
+			position: absolute;
+			background-color: rgba(0, 0, 0, 0.6);
+			color: #ffffff;
+			font-size: 22rpx;
+			line-height: 160rpx;
+			text-align: center;
+		}
+		.checkbox {
+			position: absolute;
+			left: -16rpx;
+			top: -16rpx;
+			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;
+			.title {
+				font-size: $font-base + 2rpx;
+				color: $font-color-dark;
+				height: 40rpx;
+				line-height: 40rpx;
+			}
+			.price {
+				font-size: $font-base + 2rpx;
+				color: #ff1a27;
+				font-weight: bold;
+				height: 40rpx;
+				line-height: 40rpx;
+			}
+			.attr {
+				font-size: $font-sm + 2rpx;
+				color: $font-color-light;
+				height: 50rpx;
+				line-height: 50rpx;
+			}
+			.price {
+				height: 50rpx;
+				line-height: 50rpx;
+			}
+		}
+		.del-btn {
+			padding: 4rpx 10rpx;
+			font-size: 34rpx;
+			height: 50rpx;
+			color: $font-color-light;
+		}
+	}
+}
+.guess-name {
+	padding: 25rpx 25rpx;
+	font-size: 32rpx;
+	text-align: center;
+	.img {
+		width: 80%;
+		margin: 0rpx auto;
+		height: 4rpx;
+		image {
+			width: 100%;
+			height: 100%;
+		}
+	}
+}
+/* 猜你喜欢 */
+.guess-section {
+	display: flex;
+	flex-wrap: wrap;
+	padding: 0 20rpx;
+	.guess-item {
+		// height: 558rpx;
+		position: relative;
+		overflow: hidden;
+		display: flex;
+		flex-direction: column;
+		border: 2rpx solid #eeeeee;
+		width: 343rpx;
+		margin-bottom: 4%;
+		border-radius: $border-radius-sm;
+		background-color: white;
+		padding-bottom: 30rpx;
+		&:nth-child(2n + 1) {
+			margin-right: 24rpx;
+		}
+	}
+	.imagewrapper {
+		width: 100%;
+		height: 330rpx;
+		border-radius: 3px;
+		margin-bottom: 15rpx;
+		image {
+			width: 100%;
+			height: 100%;
+			// opacity: 1;
+		}
+	}
+	.guess-list {
+		height: 130rpx;
+		.title {
+			font-size: 28rpx;
+			color: $font-color-dark;
+		}
+		.info {
+			color: #999999;
+			font-size: 24rpx;
+		}
+		.tipBox {
+			// padding-bottom: 8rpx;
+			.tipsl {
+				text {
+					border: 2rpx solid #ff1a27;
+					color: #ff1a27;
+					border-radius: 5rpx;
+					font-size: 18rpx;
+					padding: 2rpx 5rpx;
+					margin-right: 15rpx;
+				}
+			}
+		}
+	}
+	.price {
+		font-size: 28rpx;
+		width: 303rpx;
+		// padding-top: 25rpx;
+		position: relative;
+		.price_list {
+			.price-red {
+				font-weight: bold;
+				font-size: 32rpx !important;
+				color: #ff1a27;
+				text {
+					color: #9699a0;
+					font-size: 24rpx !important;
+					font-weight: normal;
+					padding: 0rpx 10rpx;
+				}
+			}
+			.price-green {
+				color: #2dbd59;
+				font-size: 24rpx !important;
+				text {
+					background: #2dbd59;
+					color: #ffffff;
+					padding: 0rpx 8 rpx;
+					border-radius: 7rpx;
+					font-size: 20rpx !important;
+					margin-left: 8rpx;
+				}
+			}
+		}
+		.img {
+			position: absolute;
+			bottom: 0;
+			right: 0;
+			width: 50rpx;
+			height: 50rpx;
+			image {
+				width: 100%;
+				height: 100%;
+			}
+		}
+	}
+
+	.icon {
+		@extend %icon;
+	}
+
+	.detail {
+		line-height: 1;
+	}
+	.tip {
+		color: white;
+		background-color: $color-yellow;
+		line-height: 1.5;
+		font-size: $font-sm;
+		padding-left: 20rpx;
+	}
+}
+/*公用边框样式*/
+%icon {
+	margin-right: 10rpx;
+	display: inline-block;
+	padding: 2rpx 10rpx;
+	border: 1rpx solid $color-yellow;
+	color: $color-yellow;
+	line-height: 1;
+	font-size: $font-base;
+	border-radius: 10rpx;
+}
+/* 底部栏 */
+.action-section {
+	/* #ifdef H5 */
+	margin-bottom: 100rpx;
+	/* #endif */
+	position: fixed;
+	// left: 30rpx;
+	bottom: 0rpx;
+	z-index: 95;
+	display: flex;
+	align-items: center;
+	width: 100%;
+	height: 120rpx;
+	padding: 0 30rpx;
+	background: #ffffff;
+	// box-shadow: 0 0 20rpx 0 rgba(0, 0, 0, 0.5);
+	.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;
+		}
+		.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;
+		.price {
+			font-size: $font-lg;
+			color: #ff383e;
+		}
+		.coupon {
+			font-size: $font-sm;
+			color: $font-color-light;
+			text {
+				color: $font-color-dark;
+			}
+		}
+	}
+	.confirm-btn {
+		padding: 0 45rpx;
+		margin: 0;
+		border-radius: 100px;
+		height: 70rpx;
+		line-height: 70rpx;
+		font-size: $font-base + 2rpx;
+		background: #ff1a27;
+	}
+}
+/* 复选框选中状态 */
+.action-section .checkbox.checked,
+.cart-item .checkbox.checked {
+	color: $base-color;
+}
+</style>

+ 738 - 0
pages/category/category.vue

@@ -0,0 +1,738 @@
+<template>
+	<view class="content">
+		<view class="scroll-top flex_item">
+			<scroll-view class="scroll-list" scroll-x>
+				<view class="scoll-box" v-for="ls in flist" :class="{ active: ls.id === currentId }" @click="tabtap(ls.id)">
+					<view class="scoll-img"><image :src="ls.pic"></image></view>
+					<view class="scoll-name">{{ ls.cate_name }}</view>
+				</view>
+			</scroll-view>
+			<view class="search-box" @click="Toseach">
+				<view class="search"><image src="/static/img/img22.png" mode="scaleToFill"></image></view>
+				<view>搜索</view>
+			</view>
+		</view>
+		<view class="scroll-view flex-tpl" :style="{ height: pageHeight + 'px' }">
+			<scroll-view scroll-y class="left-aside">
+				<view v-for="item in slist"  class="f-item" :class="{ active_top: item.id === erjiid }" @click="changeSlist(item)">{{ item.name }}</view>
+			</scroll-view>
+			<scroll-view :scroll-with-animation="scrollAnimation" scroll-y class="right-aside" @scroll="asideScroll" :scroll-top="tabScrollTop">
+				<view class="image" id="topImg" @click="Tomember">
+					<image mode="scaleToFill" class="imageLV" src="http://shicai.liuniu946.com/static/img/bpbx.jpg"></image>
+				</view>
+				<view class="tlist-box" v-for="ls in slist" :id="'main-' + ls.id">
+					<view class="tlistname" v-if="ls.list">{{ ls.name }}</view>
+					<view class="tlist-list flex_item" v-if="ls.list" v-for="item in ls.list" @click="ToDetail(item)">
+						<view class="tlist-img">
+							<view class="img"><image :src="item.image" :lazy-load="true" mode="scaleToFill"></image></view>
+							<view class="stock flex_item" v-if="item.stock > 0">
+								<image class="img" src="/static/img/img01.png" mode="scaleToFill"></image>
+								<view class="stock-num clamp">库存剩{{ item.percent | parseIntTo }}%</view>
+							</view>
+						</view>
+						<view class="sell-out" v-if="item.stock == 0"><text>已售罄</text></view>
+						<view class="tlist-info">
+							<view class="name clamp">{{ item.store_name }}</view>
+							<view class="info clamp">{{ item.store_info }}</view>
+							<view class="tipBox">
+								<view class="tip clamp" v-if="item.keyword != ''">
+									<text v-for="lss in item.keyword">{{ lss }}</text>
+								</view>
+							</view>
+							<view class="tlist-price flex">
+								<view class="price-box">
+									<view class="price">
+										¥
+										<text class="blod">{{ item.price }}</text>
+										<text class="fen">/份</text>
+									</view>
+									<view class="vip_price">
+										¥{{ item.ot_price }}
+										<text>市场价</text>
+									</view>
+								</view>
+								<view class="gocar position-relative" @click.stop="Addcar(item)">
+									<image src="/static/img/img21.png" mode="scaleToFill"></image>
+									<view class="corner" v-if="item.cart_num > 0">
+										<text>{{ item.cart_num }}</text>
+									</view>
+								</view>
+							</view>
+							<view class="bottom_border"></view>
+						</view>
+					</view>
+				</view>
+			</scroll-view>
+		</view>
+	</view>
+</template>
+<script>
+import { mapState, mapMutations } from 'vuex';
+import { category_layer } from '@/api/category.js';
+import { getProducts } from '@/api/product.js';
+import { cartAdd } from '@/api/product.js';
+import { getUserInfo } from '@/api/login.js';
+import { saveUrl } from '@/utils/loginUtils';
+export default {
+	data() {
+		return {
+			sizeCalcState: false,
+			tabScrollTop: 0,
+			currentId: '', //一级选择id,
+			erjiid: '', //二级选择id
+			flist: [], //一级分类列表
+			slist: [], //二级分类列表
+			yijishow: true, //一级界面显示
+			sanjishow: false, //三级界面隐藏
+			bili: 1, //设置页面比例
+			pageHeight: 0, //保存滚轮页面高度
+			CategoryID: '',
+			userInfo: '',
+			onload: true, //保存数据判断是否是第一次打开页面
+			scrollAnimation: true //是否开启动画
+		};
+	},
+	onLoad(option) {
+		if (option.spread) {
+			uni.setStorageSync('spread', option.spread);
+		}
+		saveUrl();
+		uni.showLoading({
+			title: '加载中'
+		});
+		this.loadData();
+	},
+	onShow() {
+		let obj = this;
+		const categoryId = uni.getStorageSync('categoryId') || '';
+		if (obj.currentId != categoryId && categoryId != '' && !obj.onload) {
+			obj.tabtap(categoryId);
+		}
+		// 初次数据加载完毕
+		obj.onload = false;
+	},
+	onReady() {
+		// 初始化获取页面宽度
+		uni.createSelectorQuery()
+			.select('.content')
+			.fields(
+				{
+					size: true
+				},
+				data => {
+					// 获取页面百分比
+					this.bili = data.width / 750;
+					console.log(data, 2);
+					this.pageHeight = data.height - 185 * this.bili;
+					console.log(this.pageHeight, 33);
+				}
+			)
+			.exec();
+	},
+	// #ifndef MP
+	// 监听导航栏输入框点击事件
+	onNavigationBarSearchInputClicked(e) {
+		uni.navigateTo({
+			url: '/pages/product/search'
+		});
+	},
+	// #endif
+	//下拉刷新
+	onPullDownRefresh() {
+		let obj = this;
+		//监听下拉刷新动作的执行方法,每次手动下拉刷新都会执行一次
+		setTimeout(function() {
+			obj.loadData();
+			uni.stopPullDownRefresh(); //停止下拉刷新动画
+		}, 1000);
+	},
+	filters: {
+		parseIntTo(percent) {
+			percent = +percent * 100;
+			if (percent % 1 === 0) {
+				return percent;
+			} else {
+				percent = percent.toFixed(1);
+				return percent;
+			}
+		}
+	},
+	computed: {
+		...mapState(['GetInfo']),
+	},
+	methods: {
+		// 载入数据
+		async loadData() {
+			let obj = this;
+			obj.loading = true;
+			category_layer({})
+				.then(({ data }) => {
+					obj.flist = data.list;
+					obj.currentId = data.first;
+					obj.erji();
+				})
+				.catch(err => {
+					console.log(err);
+				});
+		},
+		// 二级数据加载
+		erji() {
+			let obj = this;
+			getProducts({
+				cid: obj.currentId,
+				flag: 1,
+				type: 1
+			})
+				.then(({ data }) => {
+					// let newArr = [];
+					// let arr = [];
+					obj.slist = data.map(function(s) {
+						// if(s.list){
+						// 	arr = s.list;
+						// 	newArr.push(...arr);
+						// }
+						// if (s.list) {
+						// 	s.list = s.list.map(function(e) {
+						// 		e.percent = +e.percent*100;
+						// 		console.log(e.percent )
+						// 		if (e.percent % 1 === 0) {
+						// 			return e;
+						// 		} else {
+						// 			e.percent = e.percent.toFixed(1);
+						// 			console.log(e.percent )
+						// 			return e;
+						// 		}
+						// 	});
+						// }
+						return s;
+					});
+					obj.erjiid = obj.slist[0].id;
+					obj.$nextTick(e => {
+						// 重新开启动画效果
+						uni.hideLoading();
+						// 数据加载完成后重新计算高度
+						obj.calcSize()
+						obj.scrollAnimation = true;
+					});
+					// obj.erjiid = newArr[0].id;
+					// data.forEach(function(e) {
+					// 	if (e.list) {
+					// 		obj.tlist = obj.tlist.concat(e.list);
+					// 	}
+					// });
+				})
+				.catch(err => {
+					uni.hideLoading();
+					console.log(err);
+				});
+		},
+		//分享
+		// #ifdef MP
+		onShareAppMessage: function(res) {
+			let userInfo = uni.getStorageSync('userInfo');
+			// 来自页面内分享按钮
+			let pages = getCurrentPages();
+			// 获取当前页面
+			let page = pages[pages.length - 1];
+			let path = '/pages/category/category?';
+			// 保存邀请人
+			path += 'spread=' + userInfo.uid;
+			let data = {
+				path: path,
+				imageUrl: this.GetInfo.img,
+				title: this.GetInfo.title
+			};
+			console.log(data)
+			return data;
+		},
+		// #endif
+		// 加载三级数据
+		// sanji() {
+		// 	let obj = this;
+		// 	getProducts({
+		// 		sid: obj.erjiid
+		// 	})
+		// 		.then(({ data }) => {
+		// 			obj.tlist = data;
+		// 		})
+		// 		.catch(err => {
+		// 			console.log(err);
+		// 		});
+		// },
+		//加入购物车
+		Addcar(item) {
+			let obj = this;
+			cartAdd({
+				cartNum: '1', //商品数量
+				uniqueId: '', //商品标签
+				new: 0, //商品是否新增加到购物车1为不加入0为加入
+				mer_id: '',
+				productId: item.id //商品编号
+			})
+				.then(function(e) {
+					uni.showToast({
+						title: '成功加入购物车',
+						type: 'top',
+						duration: 500,
+						icon: 'none'
+					});
+					obj.erji();
+				})
+				.catch(e => {
+					console.log(e);
+				});
+		},
+		//一级分类点击
+		tabtap(item) {
+			uni.showLoading({
+				title: '加载中'
+			});
+			let obj = this;
+			// 关闭动画效果
+			obj.scrollAnimation = false;
+			// 设置顶部高度为0
+			obj.$nextTick(function(){
+				// 等待渲染完毕在执行高度修改否则动画效果依然存在
+				obj.tabScrollTop = 0;
+			})
+			// 获取当前点击的id
+			obj.currentId = item;
+			// 二级分类分类保存id
+			obj.erjiid = item;
+			uni.setStorageSync('categoryId', item);
+			// 重置分类滚轮绑定高度
+			obj.sizeCalcState = false;
+			// 加载二级方法
+			setTimeout(function() {
+				obj.erji();
+			});
+		},
+		//二级点击
+		changeSlist(item) {
+			let obj = this;
+			// 判断有没有初始化页面高度对象数据
+			console.log(obj.sizeCalcState)
+			if (!obj.sizeCalcState) {
+				obj.calcSize();
+			}
+			// 获取当前点击的id
+			obj.erjiid = item.id;
+			let index = obj.slist.findIndex(sitem => sitem.id === item.id);
+			setTimeout(function() {
+				obj.tabScrollTop = obj.slist[index].top;
+			}, 10);
+		},
+		// 商品详情页
+		ToDetail(item) {
+			if (item.stock < 1) {
+				this.$api.msg('该商品已售罄');
+			} else {
+				uni.navigateTo({
+					url: `/pages/product/product?id=` + item.id
+				});
+			}
+		},
+		Tomember() {
+			uni.navigateTo({
+						url: '/pages/groupBooking/index'
+					});
+			// this.$api.msg('暂未开通!');
+			//  this.userInfo = uni.getStorageSync('userInfo');
+			// if(this.userInfo == ''){
+			// 	userinfo({})
+			// 		.then(({ data }) => {
+			// 			this.userInfo = data;
+			// 		})
+			// 		.catch(e => {});
+			// }else{
+			// 	if (this.userInfo.level_info.grade > 99) {
+			// 		uni.navigateTo({
+			// 			url: '/pages/user/renew'
+			// 		});
+			// 	}
+			// 	if (this.userInfo.level_info.grade < 100) {
+			// 		uni.navigateTo({
+			// 			url: '/pages/user/card'
+			// 		});
+			// 	}
+			// }
+		},
+		Toseach() {
+			uni.navigateTo({
+				url: `/pages/product/search`
+			});
+		},
+		//右侧栏滚动
+		asideScroll(e) {
+			// 判断有没有初始化页面高度对象数据
+			if (!this.sizeCalcState) {
+				this.calcSize();
+			}
+			let scrollTop = e.detail.scrollTop;
+			let box = 0; //列表包裹框高度初始化
+			let bottom = 10; //距离页面底部多少像素左侧列表切换到最后一个一级分类
+			// 查询当前页面对象
+			let view = uni.createSelectorQuery().select('.right-aside');
+			view.fields(
+				{
+					id: true,
+					dataset: true,
+					rect: true,
+					size: true,
+					scrollOffset: true
+				},
+				function(e) {
+					// 保存包裹框高度
+					box = e.height;
+				}
+			).exec();
+			// 获取所有距离顶部大于滚轮距离页面高度的所有分类
+			let tabs = this.slist.filter(item => item.top <= scrollTop).reverse();
+			if (tabs.length > 0) {
+				// 判断是否已经到达滚轮底部
+				if (box + scrollTop + bottom >= e.detail.scrollHeight) {
+					this.erjiid = this.slist[this.slist.length - 1].id;
+				} else {
+					this.erjiid = tabs[0].id;
+				}
+			}
+		},
+		//计算右侧栏每个tab的高度等信息
+		calcSize() {
+			let h = this.bili * 215;
+			this.slist.forEach(item => {
+				let view = uni.createSelectorQuery().select('#main-' + item.id);
+				view.fields(
+					{
+						size: true
+					},
+					data => {
+						item.top = Math.ceil(h);
+						h += data.height;
+						item.bottom = Math.ceil(h);
+					}
+				).exec();
+			});
+			this.sizeCalcState = true;
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+page {
+	background-color: #ffffff;
+	height: 100%;
+	.content {
+		background-color: #ffffff;
+		height: 100%;
+	}
+}
+//顶部分类
+.scroll-top {
+	width: 100%;
+	font-size: 24rpx;
+	height: 170rpx;
+	padding: 0px 25rpx;
+	box-shadow: 0 1px 5px rgba(0, 0, 0, 0.06);
+	.scroll-list {
+		width: 80%;
+		overflow: hidden;
+		white-space: nowrap;
+		.scoll-box {
+			margin-right: 15rpx;
+			text-align: center;
+			display: inline-block;
+			.scoll-img {
+				width: 130rpx;
+				height: 85rpx;
+				border-radius: 100%;
+				image {
+					width: 85rpx;
+					height: 100%;
+					border-radius: 100%;
+				}
+			}
+			.scoll-name {
+				padding-top: 15rpx;
+			}
+			&.active {
+				color: $base-color;
+			}
+		}
+	}
+	.search-box {
+		text-align: center;
+		margin-left: 25rpx;
+		.search {
+			width: 85rpx;
+			height: 85rpx;
+			border-radius: 100%;
+			margin-bottom: 15rpx;
+			image {
+				width: 100%;
+				height: 100%;
+				border-radius: 100%;
+			}
+		}
+	}
+}
+.flex-tpl {
+	display: flex;
+	justify-content: space-between;
+}
+.scroll-view {
+	margin-top: 15rpx;
+	.left-aside {
+		width: 190rpx;
+		background-color: rgba(245, 246, 248, 1);
+		overflow: hidden;
+		height: 100%;
+		display: block;
+		overflow-y: scroll;
+	}
+}
+
+.f-item {
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	width: 100%;
+	height: 100rpx;
+	font-size: 24rpx;
+	color: $font-color-base;
+	position: relative;
+	&.active_top {
+		background: #ffffff;
+		font-size: 26rpx;
+		font-weight: 500;
+		color: rgba(51, 51, 51, 1);
+		&:before {
+			content: '';
+			position: absolute;
+			left: 0;
+			top: 50%;
+			transform: translateY(-50%);
+			height: 36rpx;
+			width: 8rpx;
+			background-color: $base-color;
+			border-radius: 0 4px 4px 0;
+			opacity: 0.8;
+		}
+	}
+}
+
+.right-aside {
+	overflow: hidden;
+	padding: 0rpx 20rpx;
+	height: 100%;
+	display: block;
+	overflow-y: scroll;
+	width: 100%;
+	.image {
+		width: 100%;
+		padding-bottom: 15rpx;
+		.imageLV {
+			width: 100%;
+			height: 200rpx;
+		}
+	}
+	.tlist-box {
+		.tlistname {
+			font-size: 24rpx;
+			padding: 25rpx 25rpx;
+			border-top: 2rpx solid rgba(238, 238, 238, 1);
+			border-bottom: 2rpx solid rgba(238, 238, 238, 1);
+		}
+		.tlist-list.flex_item {
+			height: 0;
+			min-height: 280rpx;
+			align-items: stretch;
+		}
+		.tlist-list {
+			padding: 25rpx 0rpx;
+			position: relative;
+			.tlist-img {
+				width: 169rpx;
+				position: relative;
+				.img {
+					width: 169rpx;
+					height: 169rpx;
+					image {
+						width: 169rpx;
+						height: 169rpx;
+					}
+				}
+				.stock {
+					margin-top: 13rpx;
+					font-size: 26rpx;
+					background: #fff1ee;
+					width: 100%;
+					color: #fb4912;
+					padding: 6rpx 0;
+					border-radius: 5rpx;
+					justify-content: center;
+					align-items: center;
+					position: absolute;
+					left: 0;
+					bottom: 0;
+					.img {
+						width: 20rpx;
+						height: 20rpx;
+						flex-shrink: 0;
+					}
+					.stock-num {
+						padding-left: 7rpx;
+						font-size: 22rpx;
+						border-radius: 5rpx;
+						height: 32rpx;
+						line-height: 32rpx;
+					}
+				}
+			}
+			.sell-out {
+				position: absolute;
+				width: 169rpx;
+				height: 190rpx;
+				background: rgba(255, 255, 255, 0.4);
+				text-align: center;
+				text {
+					line-height: 190rpx;
+					background: rgba(0, 0, 0, 0.5);
+					color: #ffffff;
+					padding: 10rpx 25rpx;
+					border-radius: 25rpx;
+					font-size: 20rpx;
+				}
+			}
+			.tlist-info {
+				font-size: 24rpx;
+				width: 61%;
+				padding-left: 25rpx;
+				padding-right: 25rpx;
+				height: 100%;
+				position: relative;
+				line-height: 1;
+				.bottom_border {
+					position: absolute;
+					border-bottom: 1px solid #eeeeee;
+					left: 25rpx;
+					bottom: 0;
+					height: 2rpx;
+					width: 100%;
+				}
+				.name {
+					height: 28rpx;
+					color: #141821;
+					font-weight: 500;
+					font-size: 26rpx;
+				}
+				.info {
+					margin: 10rpx 0rpx;
+					height: 30rpx;
+					color: #979797;
+					font-size: 24rpx;
+				}
+				.tipBox {
+					height: 50rpx;
+				}
+				.tip {
+					padding: 10rpx 0rpx;
+					text {
+						border: 2rpx solid #ff1a27;
+						color: #ff1a27;
+						border-radius: 5rpx;
+						font-size: 18rpx;
+						padding: 5rpx 10rpx;
+						margin-right: 15rpx;
+					}
+				}
+				.tlist-price {
+					position: absolute;
+					left: 25rpx;
+					bottom: 27rpx;
+					width: 100%;
+					.price-box {
+						.price {
+							padding-bottom: 15rpx;
+							color: #ff1a27;
+							.blod {
+								font-size: 35rpx;
+								font-weight: bold;
+							}
+							.fen {
+								color: #838691;
+							}
+						}
+						.vip_price {
+							color: #2dbd59;
+							font-size: 26rpx !important;
+							text {
+								background: linear-gradient(45deg, rgba(21, 197, 52, 1), rgba(21, 197, 52, 1));
+								border-radius: 5rpx;
+								color: #ffffff;
+								padding: 0rpx 10rpx;
+								margin-left: 10rpx;
+								font-size: 20rpx !important;
+							}
+						}
+					}
+					.gocar {
+						width: 50rpx;
+						height: 50rpx;
+						align-self: flex-end;
+						image {
+							width: 100%;
+							height: 100%;
+						}
+					}
+				}
+			}
+		}
+	}
+	.tlist {
+		.cate {
+			padding: 25rpx 0rpx;
+			color: #666666;
+			font-size: 24rpx;
+		}
+	}
+}
+.s-item {
+	display: flex;
+	align-items: center;
+	height: 70rpx;
+	padding-top: 8rpx;
+	font-size: 28rpx;
+	color: $font-color-dark;
+}
+.t-list {
+	display: flex;
+	flex-wrap: wrap;
+	border-radius: 15rpx;
+	width: 100%;
+	background: #fff;
+	padding-top: 12rpx;
+	&:after {
+		content: '';
+		flex: 99;
+		height: 0;
+	}
+}
+.t-item {
+	flex-shrink: 0;
+	display: flex;
+	justify-content: center;
+	align-items: center;
+	flex-direction: column;
+	width: 171rpx;
+	font-size: 26rpx;
+	color: #666;
+	padding-bottom: 20rpx;
+
+	image {
+		width: 140rpx;
+		height: 140rpx;
+	}
+}
+</style>

+ 536 - 0
pages/commission/commission.vue

@@ -0,0 +1,536 @@
+<template>
+	<view class="content">
+		<view class="content-money">
+			<view class="money-box">
+				<view class="flex views_dates">
+					<view class="flex" style="width: 50%;">
+						<view class="uni-list">
+							<view class="uni-list-cell">
+								<view class="uni-list-cell-db">
+									<picker mode="date" :value="startDate" @change="bindDateChange1">
+										<view class="uni-input">{{startDate}}</view>
+									</picker>
+								</view>
+							</view>
+						</view>
+						--
+						<view class="uni-list">
+							<view class="uni-list-cell">
+								<view class="uni-list-cell-db">
+									<picker mode="date" :value="endDate" @change="bindDateChange2">
+										<view class="uni-input">{{endDate}}<text class="iconfont iconenter"></text></view>	
+									</picker>
+								</view>
+							</view>
+						</view>
+					</view>
+				</view>
+				<view class="text">可提佣金(元)</view>
+				<view class="money">{{ data.canApply }}</view>
+				<view class="see"><text @click="navto('/pages/wallet/withdrawal')">提现</text></view>
+				<!-- <view class="see order"><text @click="navto('/pages/commission/order')">推广订单</text></view> -->
+			</view>
+			<view class="flex buttom-box">
+				<view class="buttom">
+					<view>{{data.today}}</view>
+					<text class="text">今日佣金(元)</text>
+				</view>
+				<view class="interval"></view>
+				<view class="buttom">
+					<view>{{data.total}}</view>
+					<text class="text">累计佣金(元)</text>
+				</view>
+				<view class="interval"></view>
+			</view>
+		</view>
+		<view class="navbar">
+			<view v-for="(item, index) in navList" :key="index" class="nav-item" :class="{ current: tabCurrentIndex === index }" @click="tabClick(index)">{{ item.text }}</view>
+		</view>
+		<swiper :current="tabCurrentIndex" class="swiper-box" duration="300" @change="changeTab">
+			<swiper-item class="tab-content" v-for="(tabItem, tabIndex) in navList" :key="tabIndex">
+				<scroll-view class="list-scroll-content" scroll-y @scrolltolower="loadData">
+					<!-- 空白页 -->
+					<empty v-if="tabItem.loaded === true && tabItem.orderList.length === 0"></empty>
+
+					<!-- 订单列表 -->
+					<view v-for="(item, index) in tabItem.orderList" :key="index" class="order-item">
+						<view v-for="(ls, index) in item" :key="index" class="">
+							<view class="order-id">订单编号:{{ls.order_id}}</view>
+							<view class="flex_item order-list">
+								<view class="avatar"><image :src="ls.avatar"></image></view>
+								<view class="order-info">
+									<view class="flex">
+										<view class="nickname">{{ls.nickname}}</view>
+										<view class="number">返佣:<text>{{ls.number}}</text></view>
+									</view>
+									<view class="flex">
+										<view>{{ls.add_time}}</view>
+										<view>订单金额:{{ls.pay_price}}</view>
+									</view>
+								</view>
+							</view>
+						<!-- <view class="title-box">
+							<view class="title">
+								<text>{{ ls.title }}</text>
+							</view>
+							<view class="time">
+								<text>{{ ls.add_time }}</text>
+							</view>
+						</view>
+						<view class="money">
+							<text>{{ (ls.pm == 0 ? '-' : '+') + ls.number }}</text>
+						</view> -->
+						</view>
+					</view>
+					<uni-load-more :status="tabItem.loadingType"></uni-load-more>
+				</scroll-view>
+			</swiper-item>
+		</swiper>
+	</view>
+</template>
+
+<script>
+import uniLoadMore from '@/components/uni-load-more/uni-load-more.vue';
+import { mapState, mapMutations } from 'vuex';
+import empty from '@/components/empty';
+import { spreadCommission, extractBank, turnOut } from '@/api/wallet.js';
+import { commission } from '@/api/commission.js';
+export default {
+	components: {
+		empty,
+		uniLoadMore
+	},
+	onReady() {
+		// 初始化获取页面宽度
+		uni.createSelectorQuery()
+			.select('.content')
+			.fields(
+				{
+					size: true
+				},
+				data => {
+					// console.log(data);
+					// console.log(Math.floor((data.width / 750) * 300));
+					// 保存头部高度
+					this.maxheight = data.height - Math.floor((data.width / 750) * 570);
+					// console.log(this.maxheight);
+				}
+			)
+			.exec();
+	},
+	data() {
+		return {
+			// 头部图高度
+			maxheight: '',
+			tabCurrentIndex: 0,
+			time_data: '',
+			showRight: false,
+			showLeft: false,
+			title: '全部', //选择的收益类型
+			id: '', //选择的收益类型id
+			navList: [
+				{
+					state: 5,
+					text: '收入',
+					loadingType: 'more',
+					orderList: [],
+					page: 1, //当前页数
+					limit: 10 //每次信息条数
+				},
+				{
+					state: 6,
+					text: '支出',
+					loadingType: 'more',
+					orderList: [],
+					page: 1, //当前页数
+					limit: 10 //每次信息条数
+				}
+			],
+			money: '0.00',//当前持有佣金
+			tiXianMoney:'0.00',//已提现的佣金
+			lastDayCount:'0.00',//昨日佣金
+			extractPriceCount:'0.00',//审核中的佣金
+			startDate: '开始时间',
+			endDate: '结束时间',
+			start: '',
+			end: '',
+			val1: '',
+			val2: '',
+			timedata: '',
+			data: ''
+		};
+	},
+	onLoad(options) {
+		
+	},
+	onShow() {
+		this.loadData();
+		// extractBank({}).then(({ data }) => {
+		// 	this.money = data.commissionCount;//可提现余额
+		// }).catch((e) => {
+		// 	console.log(e);
+		// });
+		// commission({}).then(({ data }) => {
+		// 	this.tiXianMoney = data.extractCount
+		// 	this.lastDayCount = data.lastDayCount
+		// 	this.extractPriceCount = data.extractPriceCount
+		// 	// console.log(data);
+		// }).catch((e) => {
+		// 	console.log(e);
+		// });
+	},
+	methods: {
+		// 页面跳转
+		navto(e) {
+			uni.navigateTo({
+				url: e
+			});
+		},
+		//获取收入支出信息
+		async loadData(source) {
+			let obj = this;
+			//这里是将订单挂载到tab列表下
+			let index = obj.tabCurrentIndex;
+			// console.log(index,11)
+			let navItem = obj.navList[index];
+			let state = navItem.state;
+			// if (source === 'tabChange' && navItem.loaded === true) {
+			// 	//tab切换只有第一次需要加载数据
+			// 	return;
+			// }
+			if (navItem.loadingType === 'loading') {
+				//防止重复加载
+				return;
+			}
+			// 修改当前对象状态为加载中
+			navItem.loadingType = 'loading';
+			navItem.loadingType = 'loading';
+			if (obj.startDate == '开始时间') {
+				obj.start = '';
+			} else {
+				console.log(obj.val1, 55);
+				obj.start = Math.round(new Date(obj.val1).getTime() / 1000).toString();
+			}
+			if (obj.endDate == '结束时间') {
+				obj.end = '';
+			} else {
+				console.log(obj.val2, 66);
+				obj.end = Math.round(new Date(obj.val2).getTime() / 1000).toString();
+			}
+			spreadCommission(
+				{
+					page: navItem.page,
+					limit: navItem.limit,
+					start_time: obj.start,
+					end_time: obj.end
+				},
+				state
+			)
+				.then(({ data }) => {
+					obj.data = data;
+					if (data.list.length > 0) {
+						navItem.orderList = navItem.orderList.concat(data.list);
+						navItem.page++;
+					}
+					console.log(navItem.orderList)
+					if (navItem.limit == data.length) {
+						//判断是否还有数据, 有改为 more, 没有改为noMore
+						navItem.loadingType = 'more';
+						return;
+					} else {
+						//判断是否还有数据, 有改为 more, 没有改为noMore
+						navItem.loadingType = 'noMore';
+					}
+					this.$set(navItem, 'loaded', true);
+				})
+				.catch(e => {
+					console.log(e);
+				});
+		},
+		//选择开始时间
+		bindDateChange1: function(e) {
+			console.log(11)
+			let obj = this;
+			let val = e.detail.value;
+			obj.val1 = e.detail.value;
+			var reg = /-/g;
+			obj.startDate = val.replace(reg, '\/');
+			var formatDate1 = new Date(obj.val1);
+			var formatDate2 = new Date(obj.timedata);
+			console.log(obj.val1, obj.timedata, '开始时间不得大于现在时间');
+			console.log(formatDate1, formatDate2, '开始时间不得大于现在时间');
+			if (formatDate1 > formatDate2) {
+				console.log(11);
+				uni.showToast({
+					title: '开始时间不得大于现在时间',
+					duration: 2000,
+					position: 'top',
+					icon: 'none'
+				});
+			} else {
+				console.log(22);
+			}
+		},
+		//选择结束时间
+		bindDateChange2: function(e) {
+			console.log(11)
+			let obj = this;
+			if (obj.val1 == '') {
+				uni.showToast({
+					title: '请先选择开始时间',
+					duration: 2000,
+					position: 'top',
+					icon: 'none'
+				});
+			} else {
+				let val = e.detail.value;
+				obj.val2 = e.detail.value;
+				var reg = /-/g;
+				obj.endDate = val.replace(reg, '\/');
+				// this.loadData();
+				console.log(obj.endDate, 22);
+				var formatDate1 = new Date(obj.val1);
+				var formatDate2 = new Date(obj.timedata);
+				var formatDate3 = new Date(obj.val2);
+				console.log(obj.val1, obj.val2, obj.timedata, '123');
+				console.log(formatDate1, formatDate3, formatDate2, '456');
+				if (formatDate1 > formatDate2) {
+					uni.showToast({
+						title: '开始时间不得大于现在时间',
+						duration: 2000,
+						position: 'top',
+						icon: 'none'
+					});
+				} else {
+					if (formatDate3 < formatDate1) {
+						// console.log(111)
+						uni.showToast({
+							title: '结束时间要大于开始时间',
+							duration: 2000,
+							position: 'top',
+							icon: 'none'
+						});
+					}
+					if (formatDate3 > formatDate2) {
+						uni.showToast({
+							title: '结束时间不得大于现在时间',
+							duration: 2000,
+							position: 'top',
+							icon: 'none'
+						});
+					} else {
+						let index = this.tabCurrentIndex;
+						let navItem = this.navList[index];
+						navItem.page = 1;
+						navItem.orderList = [];
+						obj.loadData();
+					}
+				}
+			}
+		},
+		//获取日期
+		getDate() {
+			let date = new Date();
+			let dateYear = date.getFullYear(); //获取年
+			let dateMonth = date.getMonth() + 1; //获取月
+			let dateDate = date.getDate(); //获取当日
+			this.timedata = dateYear + '-' + dateMonth + '-' + dateDate;
+		},
+		//swiper 切换
+		changeTab(e) {
+			this.tabCurrentIndex = e.target.current;
+			this.loadData('tabChange');
+		},
+		//顶部tab点击
+		tabClick(index) {
+			this.tabCurrentIndex = index;
+			// 初始化数据列表
+			this.navList[index].orderList=[];
+			// 初始化翻页数
+			this.navList[index].page=1;
+			// 初始化数据为未加载状态
+			this.navList[index].loadingType = 'more';
+			console.log(this.tabCurrentIndex)
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+page {
+	background: #f8f8f8;
+	height: 100%;
+}
+.content-money {
+	background: $page-color-base;
+	margin-bottom: 10px;
+	.buttom-box {
+		background-color: #ffffff;
+		text-align: center;
+		margin: 0 30rpx;
+		border-radius: $border-radius-sm;
+		margin-top: -30px;
+		padding: 35rpx 0rpx;
+		.buttom {
+			font-size: $font-lg;
+			flex-grow: 1;
+		}
+		.text {
+			color: #666666;
+		}
+		.interval {
+			width: 2rpx;
+			height: 60rpx;
+			background-color: #eeeeee;
+		}
+		.icon {
+			height: 50rpx;
+			width: 48rpx;
+			margin: 0 auto;
+			.icon-img {
+				width: 100%;
+				height: 100%;
+			}
+		}
+	}
+}
+
+.money-box {
+	background: #33ca69;
+	height: 400rpx;
+	color: #ffffff;
+	text-align: center;
+	padding-top: 25rpx;
+	.text {
+		font-size: 26rpx;
+		margin-top: 30rpx;
+	}
+	.money {
+		font-size: 60rpx;
+		padding: 15rpx 0rpx;
+	}
+	.views_dates {
+		font-size: 24rpx;
+		padding-top: 50rpx;
+		padding-bottom: 50rpx;
+		height: 0;
+		text-align: right;
+		justify-content: flex-end;
+		min-height: auto;
+		.uni-list {
+			line-height: 1;
+		}
+		.clearance {
+			border: 1px solid $border-color-light;
+			margin: 0 15rpx;
+			width: 5rpx;
+		}
+	}
+}
+.see {
+	font-size: 30rpx;
+	text-align: right;
+	position: absolute;
+	top: 150rpx;
+	right: 0;
+	text {
+		padding: 10rpx 30rpx;
+		// border: 2rpx solid #FFFFFF;
+		border-top-left-radius: 20rpx;
+		border-bottom-left-radius: 20rpx;
+		color: #33ca69;
+		background: #ffffff;
+	}
+}
+.order{
+	top: 250rpx !important;
+}
+
+.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: $base-color;
+			&:after {
+				content: '';
+				position: absolute;
+				left: 50%;
+				bottom: 0;
+				transform: translateX(-50%);
+				width: 44px;
+				height: 0;
+				border-bottom: 2px solid $base-color;
+			}
+		}
+	}
+}
+// 列表
+
+.swiper-box {
+	height: calc(100% - 270px);
+	padding: 25rpx 25rpx;
+	.order-item {
+		padding: 20rpx 30rpx;
+		margin-bottom: 25rpx;
+		font-size: 28rpx !important;
+		background-color: #FFFFFF;
+		color: #999999;
+		.order-id{
+			
+		}
+		.order-list{
+			padding-top: 15rpx;
+			.avatar{
+				width: 100rpx;
+				height: 100rpx;
+				border-radius: 100%;
+				image{
+					border-radius: 100%;
+					width: 100%;
+					height: 100%;
+				}
+			}
+			.order-info{
+				width:80%;
+				padding-left: 25rpx;
+				.nickname{
+					font-size: 32rpx;
+					color: #333333;
+					padding-bottom: 15rpx;
+					width: 50%;
+					
+				}
+				.number{
+					text{
+						color: #FA2740;
+					}
+				}
+			}
+		}
+		
+	}
+}
+.list-scroll-content {
+	height: 100%;
+}
+.content {
+	height: 100%;
+	.empty-content {
+		background-color: #ffffff;
+	}
+}
+</style>

+ 717 - 0
pages/commission/order.vue

@@ -0,0 +1,717 @@
+<template>
+	<view class="content">
+		<!-- <view class="navbar coupon">
+			<view class="nav-item grenn" v-if="tabCurrentIndex == 0">
+				一级总业绩:
+				<text>{{ one_price }}</text>
+			</view>
+			<view class="nav-item black" v-if="tabCurrentIndex == 1">
+				二级总业绩:
+				<text>{{ two_price }}</text>
+			</view>
+		</view> -->
+		<!-- <view class="navbar">
+			<view v-for="(item, index) in navList" :key="index" class="nav-item" :class="{ current: tabCurrentIndex === index }" @click="tabClick(index)">{{ item.text }}:{{item.number}}人</view>
+		</view> -->
+		<view class="order">
+			<view class="mony"><text style="font-size: 36rpx;">¥</text>{{ total_pay_price || '0' }}</view>
+			<view class="total">总金额</view>
+			<view class="top-box">
+				<view class="box">
+					<view class="box-1">订单总数</view>
+					<view class="box-2">{{ nums || '0' }}</view>
+				</view>
+				<view class="box">
+					<view class="box-1">下级订单数</view>
+					<view class="box-2">{{one_num || '0'}}</view>
+				</view>
+				<!-- <view class="box">
+					<view class="box-1">二级订单数</view>
+					<view class="box-2">{{two_num || '0'}}</view>
+				</view> -->
+			</view>
+			<view class="top-box">
+				<view class="box">
+					<view class="box-1">返佣总额</view>
+					<view class="box-2"><text class="sym">¥</text>{{return_num || '0'}}</view>
+				</view>
+				<view class="box">
+					<view class="box-1">下级总金额</view>
+					<view class="box-2"><text class="sym">¥</text>{{one_price || '0'}}</view>
+				</view>
+				<!-- <view class="box">
+					<view class="box-1">二级总金额</view>
+					<view class="box-2"><text class="sym">¥</text>{{two_price || '0'}}</view>
+				</view> -->
+			</view>
+		</view>
+		<!-- 下拉框 -->
+		<view class="down-box flex">
+			<!-- <picker @change="timeChange" style="flex: 1;" :range="timelist">
+				<view class="check">
+					{{timelist[timevalue] || '时间'}}
+					<view class="triangle"></view>
+				</view>
+			</picker> -->
+			<view class="date-box">
+				<view class="date-frame">
+					<view class="date-list">
+						<view class="date-list-cell">
+							<view class="date-list-cell-db">
+								<picker mode="date" :value="startDate" start="2001-01" fields="month" @change="bindDateChange1">
+									<view class="uni-input">{{startDate}}</view>
+								</picker>
+							</view>
+						</view>
+					</view>
+					--
+					<view class="date-list">
+						<view class="date-list-cell">
+							<view class="date-list-cell-db">
+								<picker mode="date" :value="endDate" start="2001-01" fields="month" @change="bindDateChange2">
+									<view class="uni-input">{{endDate}}</view>	
+								</picker>
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+			<picker @change="typeChange" style="flex: 1;" :range="typelist">
+				<view class="check">
+					{{typelist[typevalue] || '订单类型'}}
+					<view class="triangle"></view>
+				</view>
+			</picker>
+		</view>
+		<swiper :style="{ height: maxheight + 'px' }" class="swiper-box">
+			<swiper-item class="tab-content" v-for="(tabItem, tabIndex) in navList" :key="tabIndex">
+				<scroll-view class="list-scroll-content" scroll-y @scrolltolower="loadData">
+					<!-- 空白页 -->
+					<empty v-if="tabItem.loaded === true && tabItem.orderList.length === 0"></empty>
+					<!-- 订单列表 -->
+					<view v-for="(item, index) in tabItem.orderList" :key="index" class="order-item">
+						<view class="order-tpl">
+							<view class="time">{{ item.time }}</view>
+							<view class="count">本月累计推广订单:{{ item.count }}单</view>
+						</view>
+						<view v-for="ls in item.child" class="title-list">
+							<view class="title-box">
+								<view class="flex">
+									<view class="order_id">订单编号:{{ ls.order_id }}</view>
+									<!-- 0:待发货;1:待收货;2:已收货;3:待评价 -->
+									<!-- {{ ls.status == 0 ? '待付款' : ls.status == 1 ? '待发货' : ls.status == 2 ? '待收货' : ls.status == 3 ? '待评价' : ls.status == 4 ? '已完成' :'退款' }} -->
+									<view class="status" v-if="ls.refund_status == 0">
+										<view v-if="ls.paid == 1">{{ls.status == 0 ? '待发货' : ls.status == 1 ? '待收货' : ls.status == 2 ? '已收货' : '待评价'}}</view>
+										<view v-else>未支付</view>
+									</view>
+									<view class="status" v-else>{{ls.refund_status == 1 ? '退款中' :'退款成功'}}</view>
+								</view>
+								<view class="flex_item order-list">
+									<view class="title-avatar">
+										<image :src="ls.avatar"></image>
+									</view>
+									<view class="order-info">
+										<view class="flex">
+											<view class="nickname">{{ ls.nickname }}</view>
+											<view class="number">
+												返佣:
+												<text>{{ ls.number }}</text>
+											</view>
+										</view>
+										<view class="flex">
+											<view>{{ ls.time }}</view>
+											<view>订单金额:{{ ls.pay_price }}</view>
+										</view>
+									</view>
+								</view>
+							</view>
+						</view>
+					</view>
+					<uni-load-more :status="tabItem.loadingType"></uni-load-more>
+				</scroll-view>
+			</swiper-item>
+		</swiper>
+	</view>
+</template>
+
+<script>
+	import { order, orderCount } from '@/api/team.js';
+	import { mapState, mapMutations } from 'vuex';
+	import uniLoadMore from '@/components/uni-load-more/uni-load-more.vue';
+	import empty from '@/components/empty';
+	import { getTime } from '@/utils/rocessor.js';
+	// 获取当前时间的秒数
+	const time = Math.floor(new Date().getTime() / 1000);
+	export default {
+		components: {
+			empty,
+			uniLoadMore
+		},
+		filters: {
+			lastTime: function(value) {
+				const day = Math.floor((time - value) / 60 / 60 / 24);
+				return day == 0 ? '今天登陆' : day + '天前登陆';
+			}
+		},
+		onReady() {
+			// 初始化获取页面宽度
+			uni.createSelectorQuery()
+				.select('.content')
+				.fields({
+						size: true
+					},
+					data => {
+						console.log(data);
+						// 保存头部高度
+						this.maxheight = data.height - Math.floor((data.width / 750) * 480);
+						console.log(this.maxheight);
+					}
+				)
+				.exec();
+		},
+		data() {
+			return {
+				// 头部图高度
+				maxheight: '',
+				tabCurrentIndex: 0,
+				navList: [{
+					state: 0,
+					text: '一级',
+					loadingType: 'more',
+					orderList: [],
+					number: 0,
+					page: 1, //当前页数
+					limit: 10 //每次信息条数
+				}],
+				all: '',
+				list: '',
+				total: '',
+				totalLevel: '',
+				img: 'http://kaifa.crmeb.net/uploads/attach/2019/08/20190807/723adbdd4e49a0f9394dfc700ab5dba3.png',
+				total_pay_price: '',	// 总金额
+				one_price: '', // 一级总金额
+				two_price: '', // 二级总金额
+				one_num: '',	//  一级订单总数
+				two_num: '',	//  二级订单总数
+				nums: '',	// 订单总数
+				return_num: '',	// 返佣总额
+				timelist: ['全部', '今天', '昨天', '最近7天', '最近30天', '本月', '本年'],
+				typelist: ['全部', '下级订单'],
+				timevalue: '',
+				typevalue: '',
+				type: '',	// 订单类型
+				dateDay: [],	// 传的时间参数
+				startDate: '开始时间',
+				endDate: '结束时间',
+				start: '',
+				end: '',
+				val1: '',
+				val2: '',
+				timedata: '',
+			};
+		},
+		onLoad(options) {
+			this.loadData();
+			// 推广订单数据
+			orderCount({}).then(({data}) => {
+				// 总金额
+				this.total_pay_price = data[0].count;
+				// 订单总数
+				this.nums = data[1].count;
+				// 返佣总金额
+				this.return_num = data[2].count;
+				// 一级总金额
+				this.one_price = data[3].count;
+				// 一级订单数
+				this.one_num = data[4].count;
+				// 二级总金额
+				this.two_price = data[5].count;
+				// 二级订单数
+				this.two_num = data[6].count;
+			})
+		},
+		onShow() {
+			
+		},
+		methods: {
+			//选择开始时间
+			bindDateChange1: function(e) {
+				console.log(11)
+				let obj = this;
+				let val = e.detail.value;
+				obj.val1 = e.detail.value;
+				// var reg = /-/g;
+				obj.startDate = e.detail.value;
+				console.log(obj.startDate,965)
+				var formatDate1 = new Date(obj.val1);
+				var formatDate2 = new Date(obj.timedata);
+				console.log(obj.val1, obj.timedata, '开始时间不得大于现在时间');
+				console.log(formatDate1, formatDate2, '开始时间不得大于现在时间');
+				if (formatDate1 > formatDate2) {
+					console.log(11);
+					uni.showToast({
+						title: '开始时间不得大于现在时间',
+						duration: 2000,
+						position: 'top',
+						icon: 'none'
+					});
+				} else {
+					console.log(22);
+				}
+			},
+			//选择结束时间
+			bindDateChange2: function(e) {
+				console.log(11)
+				let obj = this;
+				if (obj.val1 == '') {
+					uni.showToast({
+						title: '请先选择开始时间',
+						duration: 2000,
+						position: 'top',
+						icon: 'none'
+					});
+				} else {
+					let val = e.detail.value;
+					obj.val2 = e.detail.value;
+					// var reg = /-/g;
+					// obj.endDate = val.replace(reg, '\/');
+					 obj.endDate = e.detail.value
+					console.log(obj.endDate, 22);
+					var formatDate1 = new Date(obj.val1);
+					var formatDate2 = new Date(obj.timedata);
+					var formatDate3 = new Date(obj.val2);
+					console.log(obj.val1, obj.val2, obj.timedata, '123');
+					console.log(formatDate1, formatDate3, formatDate2, '456');
+					
+					let arr = []
+					arr[0] = this.startDate;
+					arr[1] = this.endDate;
+					this.dateDay = arr.join(';')
+					console.log(this.dateDay,664853)
+					if (formatDate1 > formatDate2) {
+						uni.showToast({
+							title: '开始时间不得大于现在时间',
+							duration: 2000,
+							position: 'top',
+							icon: 'none'
+						});
+					} else {
+						if (formatDate3 < formatDate1) {
+							// console.log(111)
+							uni.showToast({
+								title: '结束时间要大于开始时间',
+								duration: 2000,
+								position: 'top',
+								icon: 'none'
+							});
+						}
+						if (formatDate3 > formatDate2) {
+							uni.showToast({
+								title: '结束时间不得大于现在时间',
+								duration: 2000,
+								position: 'top',
+								icon: 'none'
+							});
+						} else {
+							let index = this.tabCurrentIndex;
+							let navItem = this.navList[index];
+							navItem.orderList = [];
+							navItem.loadingType = 'more'
+							this.loadData()
+						}
+					}
+				}
+			},
+			//获取日期
+			getDate() {
+				let date = new Date();
+				let dateYear = date.getFullYear(); //获取年
+				let dateMonth = date.getMonth() + 1; //获取月
+				let dateDate = date.getDate(); //获取当日
+				this.timedata = dateYear + '-' + dateMonth + '-' + dateDate;
+			},
+			//类型选择
+			typeChange(e) {
+				// console.log(e)
+				this.typevalue = e.detail.value;
+				this.type = e.detail.value;
+				if (this.type == 0) {
+					this.type = ''
+				}
+				let index = this.tabCurrentIndex;
+				let navItem = this.navList[index];
+				navItem.orderList = [];
+				navItem.loadingType = 'more'
+				this.loadData()
+			},
+			// 页面跳转
+			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;
+				// }
+				if (navItem.loadingType === 'noMore') {
+					//防止重复加载
+					return;
+				}
+				// 修改当前对象状态为加载中
+				// navItem.loadingType = 'loading';
+				
+				order({
+						date: obj.dateDay,
+						orderType: obj.type,
+					})
+					.then(({
+						data
+					}) => {
+						// let arr = data.list.map(e => {
+						// 	e.lastTimeString = getTime(e.lastTime);
+						// 	return e;
+						// });
+						let arr = data.list;
+						navItem.orderList = navItem.orderList.concat(data.list);
+						console.log(navItem.orderList, 'navItem.orderList');
+						navItem.loadingType = 'noMore';
+						// if (navItem.limit == data.length) {
+						// 	//判断是否还有数据, 有改为 more, 没有改为noMore
+						// 	navItem.loadingType = 'more';
+						// 	return;
+						// } else {
+						// 	//判断是否还有数据, 有改为 more, 没有改为noMore
+						// 	navItem.loadingType = 'noMore';
+						// }
+						// 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: #f8f8f8;
+		height: 100%;
+	}
+
+	.content-money {
+		padding-bottom: 30rpx;
+		background: $page-color-base;
+
+		.buttom-box {
+			background-color: #ffffff;
+			text-align: center;
+			margin: 0 30rpx;
+			padding: 30rpx 0;
+			border-radius: $border-radius-sm;
+			margin-top: -60rpx;
+
+			.buttom {
+				font-size: $font-lg;
+				flex-grow: 1;
+
+				.money {
+					font-weight: bold;
+					font-size: 32rpx;
+					color: #db1935;
+				}
+			}
+
+			.text {
+				color: #666666;
+			}
+
+			.interval {
+				width: 2rpx;
+				height: 60rpx;
+				background-color: #eeeeee;
+			}
+
+			.icon {
+				height: 50rpx;
+				width: 48rpx;
+				margin: 0 auto;
+
+				.icon-img {
+					width: 100%;
+					height: 100%;
+				}
+			}
+		}
+	}
+
+	.money-box {
+		background: #bc253a;
+		height: 320rpx;
+		color: #ffffff;
+		text-align: center;
+		font-size: 35rpx;
+		padding-top: 60rpx;
+
+		.money_img {
+			width: 100%;
+			height: 120rpx;
+			text-align: center;
+			padding-top: 50rpx;
+			padding-bottom: 135rpx;
+
+			image {
+				width: 120rpx;
+				height: 120rpx;
+				border: 4rpx solid #fd5f6f;
+				border-radius: 50%;
+			}
+		}
+
+		.money_name {
+			width: 100%;
+			text-align: center;
+			font-size: 40rpx;
+			padding-bottom: 25rpx;
+		}
+	}
+
+	.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: $font-color;
+				background-color: #dcdfe6;
+				// color: #FC2A3F;
+				// &:after {
+				// 	content: '';
+				// 	position: absolute;
+				// 	left: 50%;
+				// 	bottom: 0;
+				// 	transform: translateX(-50%);
+				// 	width: 44px;
+				// 	height: 0;
+				// 	border-bottom: 2px solid #FC2A3F;
+				// }
+			}
+		}
+
+		.grenn {
+			background: #2fbd5b;
+		}
+
+		.black {
+			background: #434343;
+		}
+
+		.grenn,
+		.black {
+			color: #ffffff;
+			text-align: left;
+		}
+	}
+
+	// 列表
+	.order {
+		background-color: $base-color;
+		text-align: center;
+		padding: 48rpx 25rpx;
+		height: 400rpx;
+		color: #ffffff;
+
+		.mony {
+			font-size: 45rpx;
+			font-weight: bold;
+			// margin-bottom: 20rpx;
+			line-height: 1;
+		}
+
+		.total {
+			font-size: 30rpx;
+			font-weight: 500;
+		}
+
+		.top-box {
+			display: flex;
+			justify-content: space-around;
+			margin-top: 28rpx;
+			.box {
+				width: 25%;
+				.box-1 {
+					font-size: 30rpx;
+					margin-bottom: 10rpx;
+					font-weight: 500;
+				}
+				.box-2 {
+					font-size: 36rpx;
+					font-weight: bold;
+					line-height: 1;
+				}
+			}
+		}
+		.sym {
+			font-size: 30rpx;
+		}
+	}
+
+	.down-box {
+		width: 750rpx;
+		height: 80rpx;
+		background-color: #FFFFFF;
+		
+		.date-box {
+			flex: 1;
+			font-size: 28rpx;
+			font-weight: 500;
+			color: rgba(51, 51, 51, 1);
+			.date-frame {
+				display: flex;
+				align-items: center;
+				justify-content: space-evenly;
+			}
+		}
+		
+		.check {
+			flex: 1;
+			display: flex;
+			justify-content: center;
+			align-items: center;
+			font-size: 28rpx;
+			font-weight: 500;
+			color: rgba(51, 51, 51, 1);
+
+			.triangle {
+				margin-left: 10rpx;
+				width: 0;
+				height: 0;
+				border-style: solid;
+				border-width: 10rpx;
+				margin-top: 14rpx;
+				border-color: #333333 transparent transparent transparent;
+			}
+		}
+	}
+
+	.swiper-box {
+		font-size: 28rpx;
+
+		.order-item {
+			line-height: 1.5;
+
+			.order-tpl {
+				padding: 25rpx 0rpx;
+				padding-bottom: 15rpx !important;
+
+				.count {
+					color: #999999;
+				}
+			}
+
+			.title-list {
+				background-color: #ffffff;
+				width: 100%;
+				padding: 20rpx 30rpx;
+				margin-top: 15rpx;
+
+				.title-box {
+					.order_id {
+						color: #999999;
+						padding-bottom: 15rpx;
+					}
+
+					.status {
+						color: #F9273F;
+					}
+
+					.order-list {
+						.title-avatar {
+							width: 100rpx;
+							height: 100rpx;
+							margin-right: 25rpx;
+
+							image {
+								width: 100%;
+								height: 100%;
+								border-radius: 100%;
+							}
+						}
+
+						.order-info {
+							color: #999999;
+							width: 80%;
+							padding-left: 25rpx;
+
+							.nickname {
+								font-size: 32rpx;
+								color: #333333;
+								padding-bottom: 15rpx;
+								width: 50%;
+							}
+
+							.number {
+								text {
+									color: #fa2740;
+								}
+							}
+						}
+					}
+				}
+			}
+
+			.money {
+				color: #db1935;
+				font-size: $font-lg;
+			}
+		}
+	}
+
+	.list-scroll-content {
+		height: 100%;
+		padding: 0rpx 25rpx;
+	}
+
+	.content {
+		height: 100%;
+
+		.empty-content {
+			background-color: #ffffff;
+		}
+	}
+</style>

+ 640 - 0
pages/commission/orderGroup.vue

@@ -0,0 +1,640 @@
+<template>
+	<view class="content">
+		<!-- <view class="navbar coupon">
+			<view class="nav-item grenn" v-if="tabCurrentIndex == 0">
+				一级总业绩:
+				<text>{{ one_price }}</text>
+			</view>
+			<view class="nav-item black" v-if="tabCurrentIndex == 1">
+				二级总业绩:
+				<text>{{ two_price }}</text>
+			</view>
+		</view> -->
+		<!-- <view class="navbar">
+			<view v-for="(item, index) in navList" :key="index" class="nav-item" :class="{ current: tabCurrentIndex === index }" @click="tabClick(index)">{{ item.text }}:{{item.number}}人</view>
+		</view> -->
+		<view class="order">
+			<view class="flex views_dates">
+				<view class="flex" style="width: 40%;">
+					<view class="uni-list">
+						<view class="uni-list-cell">
+							<view class="uni-list-cell-db">
+								<picker mode="date" :value="startDate" start="2001-01" fields="month" @change="bindDateChange1">
+									<view class="uni-input">{{startDate}}</view>
+								</picker>
+							</view>
+						</view>
+					</view>
+					--
+					<view class="uni-list">
+						<view class="uni-list-cell">
+							<view class="uni-list-cell-db">
+								<picker mode="date" :value="endDate" start="2001-01" fields="month" @change="bindDateChange2">
+									<view class="uni-input">{{endDate}}<text class="iconfont iconenter"></text></view>	
+								</picker>
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+			<view class="mony"><text style="font-size: 36rpx;">¥</text>{{ pinkNums || '0' }}</view>
+			<view class="total">总金额</view>
+			<view class="top-box">
+				<view class="box">
+					<view class="box-1">人头奖</view>
+					<view class="box-2"><text class="symbool">¥</text>{{ peoNum || '0' }}</view>
+				</view>
+				<view class="box">
+					<view class="box-1">分佣奖</view>
+					<view class="box-2"><text class="symbool">¥</text>{{ num_fen || '0' }}</view>
+				</view>
+			</view>
+		</view>
+		
+		<swiper :style="{ height: maxheight + 'px' }" class="swiper-box">
+			<swiper-item class="tab-content" v-for="(tabItem, tabIndex) in navList" :key="tabIndex">
+				<scroll-view class="list-scroll-content" scroll-y @scrolltolower="loadData">
+					<!-- 空白页 -->
+					<empty v-if="tabItem.orderList.length === 0"></empty>
+					<!-- 订单列表 -->
+					<view v-for="(item, index) in tabItem.orderList" :key="index" class="order-item">
+						<view class="order-tpl">
+							<view class="time">{{ item.time }}</view>
+							<view class="count">本月累计拼团订单:{{ item.count }}单</view>
+						</view>
+						<view v-for="ls in item.child" class="title-list">
+							<view class="title-box">
+								<view class="flex">
+									<view class="order_id">订单编号:{{ ls.order_id }}</view>
+									<!-- 0:待发货;1:待收货;2:已收货;3:待评价 -->
+									<!-- {{ ls.status == 0 ? '待付款' : ls.status == 1 ? '待发货' : ls.status == 2 ? '待收货' : ls.status == 3 ? '待评价' : ls.status == 4 ? '已完成' :'退款' }} -->
+									<view class="status" v-if="ls.refund_status == 0">
+										<view v-if="ls.paid == 1">{{ls.status == 0 ? '待发货' : ls.status == 1 ? '待收货' : ls.status == 2 ? '已收货' : '待评价'}}</view>
+										<view v-else>未支付</view>
+									</view>
+									<view class="status" v-else>{{ls.refund_status == 1 ? '退款中' :'退款成功'}}</view>
+								</view>
+								<view class="flex_item order-list">
+									<view class="title-avatar">
+										<image :src="ls.avatar"></image>
+									</view>
+									<view class="order-info">
+										<view class="flex">
+											<view class="nickname">{{ ls.nickname }}</view>
+											<view class="number">
+												返佣:
+												<text>{{ ls.number }}</text>
+											</view>
+										</view>
+										<view class="flex">
+											<view>{{ ls.time }}</view>
+											<view>订单金额:{{ ls.pay_price }}</view>
+										</view>
+									</view>
+								</view>
+							</view>
+						</view>
+					</view>
+					<uni-load-more :status="tabItem.loadingType"></uni-load-more>
+				</scroll-view>
+			</swiper-item>
+		</swiper>
+	</view>
+</template>
+
+<script>
+	import { orderPink } from '@/api/team.js';
+	import { mapState, mapMutations } from 'vuex';
+	import uniLoadMore from '@/components/uni-load-more/uni-load-more.vue';
+	import empty from '@/components/empty';
+	import {
+		getTime
+	} from '@/utils/rocessor.js';
+	// 获取当前时间的秒数
+	const time = Math.floor(new Date().getTime() / 1000);
+	export default {
+		components: {
+			empty,
+			uniLoadMore
+		},
+		filters: {
+			lastTime: function(value) {
+				const day = Math.floor((time - value) / 60 / 60 / 24);
+				return day == 0 ? '今天登陆' : day + '天前登陆';
+			}
+		},
+		onReady() {
+			// 初始化获取页面宽度
+			uni.createSelectorQuery()
+				.select('.content')
+				.fields({
+						size: true
+					},
+					data => {
+						console.log(data);
+						// 保存头部高度
+						this.maxheight = data.height - Math.floor((data.width / 750) * 340);
+						console.log(this.maxheight);
+					}
+				)
+				.exec();
+		},
+		data() {
+			return {
+				// 头部图高度
+				maxheight: '',
+				tabCurrentIndex: 0,
+				navList: [{
+					state: 0,
+					text: '一级',
+					loadingType: 'more',
+					orderList: [],
+					number: 0,
+					page: 1, //当前页数
+					limit: 10 //每次信息条数
+				}],
+				all: '',
+				list: '',
+				total: '',
+				totalLevel: '',
+				img: 'http://kaifa.crmeb.net/uploads/attach/2019/08/20190807/723adbdd4e49a0f9394dfc700ab5dba3.png',
+				// one_price: '', //一级总金额
+				// two_price: '', //二级总金额
+				// total_pay_price: '',
+				timelist: ['全部', '今天', '昨天', '最近7天', '最近30天', '本月', '本年'],
+				typelist: ['全部', '一级订单', '二级订单'],
+				startDate: '开始时间',
+				endDate: '结束时间',
+				start: '',
+				end: '',
+				val1: '',
+				val2: '',
+				timedata: '',
+				dateDay: [],	// 传的时间参数
+				num_fen: '',	// 分佣奖
+				peoNum: '',		// 人头奖
+				pinkNums: ''	// 总金额
+			};
+		},
+		onLoad(options) {},
+		onShow() {
+			this.loadData();
+		},
+		methods: {
+			//选择开始时间
+			bindDateChange1: function(e) {
+				console.log(11)
+				let obj = this;
+				let val = e.detail.value;
+				obj.val1 = e.detail.value;
+				// var reg = /-/g;
+				obj.startDate = e.detail.value;
+				console.log(obj.startDate,965)
+				var formatDate1 = new Date(obj.val1);
+				var formatDate2 = new Date(obj.timedata);
+				console.log(obj.val1, obj.timedata, '开始时间不得大于现在时间');
+				console.log(formatDate1, formatDate2, '开始时间不得大于现在时间');
+				if (formatDate1 > formatDate2) {
+					console.log(11);
+					uni.showToast({
+						title: '开始时间不得大于现在时间',
+						duration: 2000,
+						position: 'top',
+						icon: 'none'
+					});
+				} else {
+					console.log(22);
+				}
+			},
+			//选择结束时间
+			bindDateChange2: function(e) {
+				console.log(11)
+				let obj = this;
+				if (obj.val1 == '') {
+					uni.showToast({
+						title: '请先选择开始时间',
+						duration: 2000,
+						position: 'top',
+						icon: 'none'
+					});
+				} else {
+					let val = e.detail.value;
+					obj.val2 = e.detail.value;
+					// var reg = /-/g;
+					// obj.endDate = val.replace(reg, '\/');
+					 obj.endDate = e.detail.value
+					console.log(obj.endDate, 22);
+					var formatDate1 = new Date(obj.val1);
+					var formatDate2 = new Date(obj.timedata);
+					var formatDate3 = new Date(obj.val2);
+					console.log(obj.val1, obj.val2, obj.timedata, '123');
+					console.log(formatDate1, formatDate3, formatDate2, '456');
+					
+					let arr = []
+					arr[0] = this.startDate;
+					arr[1] = this.endDate;
+					this.dateDay = arr.join(';')
+					console.log(this.dateDay,664853)
+					if (formatDate1 > formatDate2) {
+						uni.showToast({
+							title: '开始时间不得大于现在时间',
+							duration: 2000,
+							position: 'top',
+							icon: 'none'
+						});
+					} else {
+						if (formatDate3 < formatDate1) {
+							// console.log(111)
+							uni.showToast({
+								title: '结束时间要大于开始时间',
+								duration: 2000,
+								position: 'top',
+								icon: 'none'
+							});
+						}
+						if (formatDate3 > formatDate2) {
+							uni.showToast({
+								title: '结束时间不得大于现在时间',
+								duration: 2000,
+								position: 'top',
+								icon: 'none'
+							});
+						} else {
+							let index = this.tabCurrentIndex;
+							let navItem = this.navList[index];
+							navItem.orderList = [];
+							navItem.loadingType = 'more'
+							this.loadData()
+						}
+					}
+				}
+			},
+			//获取日期
+			getDate() {
+				let date = new Date();
+				let dateYear = date.getFullYear(); //获取年
+				let dateMonth = date.getMonth() + 1; //获取月
+				let dateDate = date.getDate(); //获取当日
+				this.timedata = dateYear + '-' + dateMonth + '-' + dateDate;
+			},
+			// 页面跳转
+			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 (navItem.loadingType === 'noMore') {
+					//防止重复加载
+					return;
+				}
+				// if (source === 'tabChange' && navItem.loaded === true) {
+				// 	//tab切换只有第一次需要加载数据
+				// 	return;
+				// }
+				// if (navItem.loadingType === 'loading') {
+				// 	//防止重复加载
+				// 	return;
+				// }
+				// // 修改当前对象状态为加载中
+				// navItem.loadingType = 'loading';
+				orderPink({
+						date: obj.dateDay
+					})
+					.then(({
+						data
+					}) => {
+						// let arr = data.list.map(e => {
+						// 	e.lastTimeString = getTime(e.lastTime);
+						// 	return e;
+						// });
+						let arr = data.list;
+						obj.pinkNums = data.prize_sum;	// 总金额
+						obj.peoNum = data.people_prize_sum;	// 人头奖
+						obj.num_fen = data.pink_prize_sum;	// 分佣奖
+						navItem.orderList = navItem.orderList.concat(data.list);
+						console.log(navItem.orderList, 'navItem.orderList');
+						navItem.loadingType = 'noMore';
+						// navItem.page++;
+						// if (navItem.limit == data.length) {
+						// 	//判断是否还有数据, 有改为 more, 没有改为noMore
+						// 	navItem.loadingType = 'more';
+						// 	return;
+						// } else {
+						// 	//判断是否还有数据, 有改为 more, 没有改为noMore
+						// 	navItem.loadingType = 'noMore';
+						// }
+						// 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: #f8f8f8;
+		height: 100%;
+	}
+
+	.content-money {
+		padding-bottom: 30rpx;
+		background: $page-color-base;
+
+		.buttom-box {
+			background-color: #ffffff;
+			text-align: center;
+			margin: 0 30rpx;
+			padding: 30rpx 0;
+			border-radius: $border-radius-sm;
+			margin-top: -60rpx;
+
+			.buttom {
+				font-size: $font-lg;
+				flex-grow: 1;
+
+				.money {
+					font-weight: bold;
+					font-size: 32rpx;
+					color: #db1935;
+				}
+			}
+
+			.text {
+				color: #666666;
+			}
+
+			.interval {
+				width: 2rpx;
+				height: 60rpx;
+				background-color: #eeeeee;
+			}
+
+			.icon {
+				height: 50rpx;
+				width: 48rpx;
+				margin: 0 auto;
+
+				.icon-img {
+					width: 100%;
+					height: 100%;
+				}
+			}
+		}
+	}
+
+	.money-box {
+		background: #bc253a;
+		height: 320rpx;
+		color: #ffffff;
+		text-align: center;
+		font-size: 35rpx;
+		padding-top: 60rpx;
+
+		.money_img {
+			width: 100%;
+			height: 120rpx;
+			text-align: center;
+			padding-top: 50rpx;
+			padding-bottom: 135rpx;
+
+			image {
+				width: 120rpx;
+				height: 120rpx;
+				border: 4rpx solid #fd5f6f;
+				border-radius: 50%;
+			}
+		}
+
+		.money_name {
+			width: 100%;
+			text-align: center;
+			font-size: 40rpx;
+			padding-bottom: 25rpx;
+		}
+	}
+
+	.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: $font-color;
+				background-color: #dcdfe6;
+				// color: #FC2A3F;
+				// &:after {
+				// 	content: '';
+				// 	position: absolute;
+				// 	left: 50%;
+				// 	bottom: 0;
+				// 	transform: translateX(-50%);
+				// 	width: 44px;
+				// 	height: 0;
+				// 	border-bottom: 2px solid #FC2A3F;
+				// }
+			}
+		}
+
+		.grenn {
+			background: #2fbd5b;
+		}
+
+		.black {
+			background: #434343;
+		}
+
+		.grenn,
+		.black {
+			color: #ffffff;
+			text-align: left;
+		}
+	}
+
+	// 列表
+	.order {
+		background-color: $base-color;
+		text-align: center;
+		height: 340rpx;
+		color: #ffffff;
+
+		.mony {
+			font-size: 45rpx;
+			font-weight: bold;
+			margin-bottom: 20rpx;
+		}
+
+		.total {
+			font-size: 30rpx;
+			font-weight: 500;
+		}
+
+		.top-box {
+			display: flex;
+			justify-content: center;
+			margin-top: 20rpx;
+
+			.box {
+				flex: 1;
+
+				.box-1 {
+					font-size: 30rpx;
+					margin-bottom: 10rpx;
+					font-weight: 500;
+				}
+
+				.box-2 {
+					font-size: 36rpx;
+					font-weight: bold;
+				}
+			}
+		}
+		.symbool {
+			font-size: 30rpx;
+		}
+		
+		.views_dates {
+			font-size: 24rpx;
+			padding-top: 50rpx;
+			padding-bottom: 40rpx;
+			height: 0;
+			text-align: right;
+			justify-content: flex-end;
+			min-height: auto;
+			.uni-list {
+				line-height: 1;
+			}
+			.uni-input {
+				display: flex;
+				align-items: center;
+			}
+			.iconenter {
+				margin-bottom: 8rpx;
+			}
+			.clearance {
+				border: 1px solid $border-color-light;
+				margin: 0 15rpx;
+				width: 5rpx;
+			}
+		}
+		
+	}
+	
+	.swiper-box {
+		font-size: 28rpx;
+
+		.order-item {
+			line-height: 1.5;
+
+			.order-tpl {
+				padding: 25rpx 0rpx;
+				padding-bottom: 15rpx !important;
+
+				.count {
+					color: #999999;
+				}
+			}
+
+			.title-list {
+				background-color: #ffffff;
+				width: 100%;
+				padding: 20rpx 30rpx;
+				margin-top: 15rpx;
+
+				.title-box {
+					.order_id {
+						color: #999999;
+						padding-bottom: 15rpx;
+					}
+
+					.status {
+						color: #F9273F;
+					}
+
+					.order-list {
+						.title-avatar {
+							width: 100rpx;
+							height: 100rpx;
+							margin-right: 25rpx;
+
+							image {
+								width: 100%;
+								height: 100%;
+								border-radius: 100%;
+							}
+						}
+
+						.order-info {
+							color: #999999;
+							width: 80%;
+							padding-left: 25rpx;
+
+							.nickname {
+								font-size: 32rpx;
+								color: #333333;
+								padding-bottom: 15rpx;
+								width: 50%;
+							}
+
+							.number {
+								text {
+									color: #fa2740;
+								}
+							}
+						}
+					}
+				}
+			}
+
+			.money {
+				color: #db1935;
+				font-size: $font-lg;
+			}
+		}
+	}
+
+	.list-scroll-content {
+		height: 100%;
+		padding: 0rpx 25rpx;
+	}
+
+	.content {
+		height: 100%;
+
+		.empty-content {
+			background-color: #ffffff;
+		}
+	}
+</style>

+ 361 - 0
pages/coupon/coupon.vue

@@ -0,0 +1,361 @@
+<template>
+	<view class="content">
+		<view class="navbar coupon">
+			<view class="nav-item " :class="{'grenn':tab==0}" @click="Click(0)">优惠券</view>
+			<view class="nav-item " :class="{'grenn':tab==1}"  @click="Click(1)">商品券</view>
+		</view>
+		<view class="content-box">
+			<view class="navbar">
+				<view v-for="(item, index) in navList" :key="index" class="nav-item" :class="{ current: tabCurrentIndex === index }" @click="tabClick(index)">{{ item.text }}</view>
+			</view>
+			<swiper :current="tabCurrentIndex" :style="{ height: maxheight + 'px' }" class="swiper-box" duration="300" @change="changeTab">
+				<swiper-item class="tab-content" v-for="(tabItem, tabIndex) in navList" :key="tabIndex">
+					<scroll-view class="list-scroll-content" scroll-y @scrolltolower="loadData">
+					<!-- 空白页 -->
+					<empty v-if="tabItem.loaded === true && tabItem.orderList.length === 0"></empty>
+					<view v-for="(item, index) in tabItem.orderList" :key="index" class="row flex">
+						<view class="list-money flex" v-if="tab==0">
+							<image :src="item._msg == '可使用' ? '/static/img/img03.png' : '/static/img/img02.png'" mode="scaleToFill"></image>
+							<view class="list-money-text">
+								<view class="tit" :class="{ action: item._msg == '可使用' }">
+									<text>{{ item.coupon_price }}</text>
+								</view>
+								<view class="price">
+									<text>满{{ item.use_min_price }}元</text>
+								</view>
+							</view>
+						</view>
+						<view class="list-interval position-relative" v-if="tab==0">
+							<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._msg == '可使用'  }">{{ 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._msg == '可使用' ">
+								<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>
+					</scroll-view>
+				</swiper-item>
+			</swiper>
+		</view>
+	</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 {
+			// 头部图高度
+			maxheight: '',
+			tabCurrentIndex: 0,
+			tab:0,
+			navlist:[
+				{
+					state: 0,
+					text: '优惠券',
+				},
+				{
+					state: 2,
+					text: '商品券',
+				}
+			],
+			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;
+			let form = this.navlist[this.tab].state;
+			if (source === 'Click') {
+				navItem.page = 1;
+				navItem.loadingType = 'more';
+				navItem.orderList = [];
+			}
+			if (navItem.loadingType === 'loading') {
+				//防止重复加载
+				return;
+			}
+			// 修改当前对象状态为加载中
+			navItem.loadingType = 'loading';
+			getCouponsList(
+				{
+					page: navItem.page,
+					limit: navItem.limit,
+					form:form
+				},
+				index
+			)
+				.then(({ data }) => {
+					let da = data.map(e => {
+						e.coupon_price = +e.coupon_price.replace(',', '');
+						e.use_min_price = +e.use_min_price.replace(',', '');
+						return e;
+					});
+					navItem.orderList = navItem.orderList.concat(da);
+					console.log(navItem.orderList,55);
+					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;
+		},
+		//顶部tab点击
+		Click(index) {
+			this.tab = index;
+			this.tabCurrentIndex = 0;
+			this.loadData('Click');
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+// 卡卷可用时颜色
+$card-color-action: #fc4141;
+
+.content-box{
+		height:calc(100% - 40px);
+}
+.list-scroll-content {
+	height: 100%;
+}
+.content {
+	height: 100%;
+	.empty-content {
+		background-color: #ffffff;
+	}
+}
+page {
+	background: #F8F6F6;
+	height: 100%;
+}
+.swiper-box {
+	padding-top: 25rpx;
+		height: calc(100% - 100rpx);
+	}
+.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;
+	background: #fff;
+	box-shadow: 0 1px 5px rgba(0, 0, 0, 0.06);
+	position: relative;
+	z-index: 10;
+	.nav-item {
+		flex: 1;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		height: 100%;
+		font-size: 15px;
+		color: $font-color-dark;
+		position: relative;
+		&.current {
+			color: $font-color;
+			background-color:#DCDFE6;
+			// &:after {
+			// 	content: '';
+			// 	position: absolute;
+			// 	left: 50%;
+			// 	bottom: 0;
+			// 	transform: translateX(-50%);
+			// 	width: 44px;
+			// 	height: 0;
+			// 	border-bottom: 2px solid #bc253a;
+			// }
+		}
+	}
+	.grenn{
+		background: #2FBD5B;
+		color: #FFFFFF;
+	}
+	.black{
+		background: #434343;
+		color: #FFFFFF;
+	}
+}
+
+/* load-more */
+.uni-load-more {
+	display: flex;
+	flex-direction: row;
+	height: 80rpx;
+	align-items: center;
+	justify-content: center;
+}
+</style>

+ 200 - 0
pages/coupon/getcoupon.vue

@@ -0,0 +1,200 @@
+<template>
+	<view>
+		<!-- <scroll-view class="coupon-box clamp" :scroll-y="true"> -->
+			<view v-for="(item, index) in couponArray" :key="item.id" class="coupon-list">
+				<view class="row flex">
+					<view class="list-money flex">
+						<image :src="item.is_use ? '/static/img/img02.png' : '/static/img/img03.png'" mode="scaleToFill"></image>
+						<view class="list-money-text">
+							<view class="tit" :class="{ noAction: item.is_use }">
+								<text>{{ item.coupon_price }}</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_title" :class="{ noAction: item.is_use }">满减券</text></view>
+						<view class="right_time">
+							<text>满{{ item.use_min_price }}使用</text>
+						</view>
+					</view>
+					<view class="right_use" :class="{ noAction: item.is_use }" @click="setCoupons(item)">
+						<text>{{ item.is_use ? '已领取' : '立即领取' }}</text>
+					</view>
+				</view>
+			</view>
+		<!-- </scroll-view> -->
+	</view>
+</template>
+
+<script>
+import { loadIndexs } from '@/api/index.js';
+import { setCoupons } from '@/api/coupon.js';
+import { mapState } from 'vuex';
+export default {
+	components: {},
+	computed: {
+		...mapState('user',['hasLogin']),
+		...mapState(['loginInterceptor', 'shopId', 'shopDetail','baseURL'])
+	},
+	data() {
+		return {
+			couponArray: [], //可领取优惠券
+		};
+	},
+	onShow() {
+		this.loadData();
+	},
+	// //下拉刷新
+	// onPullDownRefresh() {
+	// 	let obj = this;
+	// 	//监听下拉刷新动作的执行方法,每次手动下拉刷新都会执行一次
+	// 	setTimeout(function() {
+	// 		obj.loadData();
+	// 		uni.stopPullDownRefresh(); //停止下拉刷新动画
+	// 	}, 1000);
+	// },
+	methods: {
+		// 请求载入数据
+		async loadData() {
+			loadIndexs({
+				// mer_id: this.shopId
+			}).then(({ data }) => {
+				this.$set(this, 'couponArray', data.couponList); //保存卡包券
+			});
+		},
+		// 点击触发领取优惠券
+		setCoupons(item) {
+			// 判断是否已经领取了优惠券
+			let obj = this;
+			uni.showModal({
+				title: '领取提示',
+				content: '是否领取优惠券',
+				success(e) {
+					if (e.confirm) {
+						setCoupons({ couponId: item.id }).then(e => {
+							item.is_use = true;
+							uni.showToast({
+								title: '领取成功',
+								type: 'top',
+								duration: 2000,
+								icon:'none'
+							});
+						});
+					}
+				}
+			});
+		},
+	},
+}
+		
+</script>
+
+<style lang="scss">
+// 优惠券
+// .coupon-list {
+// 	display: inline-block;
+// }
+.row {
+	border-radius: 15rpx;
+	margin: 25rpx;
+	height: 155rpx;
+	// width: 552rpx;
+	overflow: hidden;
+	background-color: #ffffff;
+	padding-right: 25rpx;
+	.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%;
+		min-width: 155rpx;
+		text-align: center;
+		image {
+			height: 100%;
+			width: 20rpx;
+		}
+		.list-money-text {
+			flex-grow: 1;
+			padding-left: 30rpx;
+			.tit {
+				text-align: center;
+				padding: 15rpx 0rpx;
+				font-size: 55rpx;
+				color:#bc253a;
+				font-weight: bold;
+				&.noAction {
+					color: $font-color-light;
+				}
+			}
+			.price {
+				padding-bottom: 25rpx;
+				color: $font-color-light;
+			}
+		}
+	}
+	.row_list_right {
+		// flex-grow: 1;
+		min-width: 200rpx;
+		padding-left: 25rpx;
+		line-height: 1;
+		.right_time {
+			padding: 10rpx 0rpx;
+			color: $font-color-light;
+			font-size: $font-sm;
+		}
+		.right_top {
+			margin: 15rpx 0;
+			.right_name {
+				font-size: $font-base;
+				color: #bc253a;
+				font-weight: bold;
+			}
+			.right_title {
+				font-size: $font-base;
+				color: $font-base;
+				font-weight: bold;
+				&.noAction {
+					color: $font-color-light;
+				}
+			}
+		}
+	}
+	.right_use {
+		margin: 15rpx 0;
+		padding: 10rpx;
+		width: 160rpx;
+		text-align: center;
+		color: #fff;
+		background-color: #bc253a;
+		border-radius: 50rpx;
+		font-size: $font-sm;
+		&.noAction {
+			background-color: $font-color-light;
+		}
+	}
+	.iconlocation {
+		font-size: 36rpx;
+		color: $font-color-light;
+	}
+}
+</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>

+ 177 - 0
pages/favorites/favorites.vue

@@ -0,0 +1,177 @@
+<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
+		};
+	},
+	onShow() {
+		this.loadData();
+	},
+	//下拉刷新
+	onPullDownRefresh() {
+		let obj = this;
+		//监听下拉刷新动作的执行方法,每次手动下拉刷新都会执行一次
+		setTimeout(function() {
+			obj.loadData();
+			uni.stopPullDownRefresh(); //停止下拉刷新动画
+		}, 1000);
+	},
+	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,
+									icon:'none'
+								});
+								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>

+ 756 - 0
pages/groupBooking/1.vue

@@ -0,0 +1,756 @@
+<template>
+	<view class="container">
+		<view id="pinkBanner">
+			<view class="top-img"><image src="http://shicai.liuniu946.com/static/img/pinkBanner.png"></image></view>
+			<view class="switch-bar flex_item">
+				<view class="switchList" @click="change(index)" :key="index" v-for="(ls, index) in switchList" v-bind:class="{ active_color: index == checkedTab }">
+					<view class="time">{{ ls.time }}</view>
+					<view class="name">{{ ls.name }}</view>
+					<view class="switchimg" v-bind:class="{ switchimgshow: index == 1 }"><image src="/static/img/img084.png"></image></view>
+				</view>
+			</view>
+			<view class="tip flex">
+				<view class="time-box flex" >
+					<view class="time-name">抢购中先下单先得哦</view>
+					<view class="flex_item" v-show="starting">
+						<view>距开始</view>
+						<uni-countdown color="#FFFFFF" background-color="#334432" 
+							:show-day="false" 
+							:hour="starthour" 
+							:minute="startminute" 
+							:second="startsecond">
+						</uni-countdown>
+					</view>
+					<view class="flex_item" v-show="Timeing">
+						<view>距结束</view>
+						<uni-countdown color="#FFFFFF" background-color="#334432" 
+							:show-day="false" 
+							:hour="Timeinghour" 
+							:minute="Timeingminute" 
+							:second="Timeingsecond">
+						</uni-countdown>
+					</view>
+				</view>
+			</view>
+		</view>
+		<swiper :current="checkedTab" :style="{ height: scrollHeight + 'px' }" duration="300" @change="changeTab">
+			<swiper-item class="tab-content" v-for="(tabItem, tabIndex) in switchList" :key="tabIndex">
+				<scroll-view class="list-scroll-content" scroll-y @scrolltolower="loadData()">
+					<!-- 空白页 -->
+					<empty v-if="tabItem.loaded === true && tabItem.list.length === 0"></empty>
+					<!-- 订单列表 -->
+					<view class="preferred_centent">
+						<view class="preferred_item" v-for="item in tabItem.list" @click="navToDetailPage(item)">
+							<view class="flex_item">
+								<view class="tlist-img">
+									<view class="leftImgIcon" v-if="tabItem.id == 1">AA团</view>
+									<view class="leftImgIcon" v-if="tabItem.id == 2">达人团</view>
+									<view class="img"><image :src="item.image" mode="scaleToFill"></image></view>
+								</view>
+								<view class="tlist-img " v-for="imgItem in item.images">
+									<view class="img"><image :src="imgItem" mode="scaleToFill"></image></view>
+								</view>
+							</view>
+							<view class="goods_name">
+								<view class="goods_title flex_item">
+									<view class="text">{{ item.min_people }}人团</view>
+									<view class="">{{ item.title }}</view>
+								</view>
+								<view class="goods-height">
+									<!-- <view class="goods_num clamp">{{ item.info }}</view> -->
+									<view class="flex goods-peplo">
+										<view class="goods-tip flex_item">
+											<view class="peplo">库存剩{{ item.percent | parseIntTo }}%</view>
+											<view class="make">{{ item.mark }}</view>
+										</view>
+										<view class="right flex_item">
+											<image src="/static/icon/hot.png" mode="aspectFill"></image>
+											<text>已拼{{ item.order_count }}份</text>
+										</view>
+									</view>
+								</view>
+								<view class="price flex">
+									<view class="price_list">
+										<view class="price-red">
+											<text class="moneyIcon">¥</text>
+											<text class="money">{{ item.price }}</text>
+											<text class="moneyType">/{{ item.unit_name }}</text>
+											<text class="outMoney">¥{{ item.product_price }}</text>
+										</view>
+									</view>
+									<view class="img position-relative" @click.stop="Addcar(item)">去开团</view>
+								</view>
+							</view>
+						</view>
+					</view>
+					<uni-load-more :status="tabItem.loadingType"></uni-load-more>
+				</scroll-view>
+			</swiper-item>
+		</swiper>
+		<button open-type="share" class="shareDate">分享给好友</button>
+	</view>
+</template>
+<script>
+import { cartAdd } from '@/api/product.js';
+import { getCombinationList } from '@/api/groupBooking.js';
+import { saveUrl, interceptor } from '@/utils/loginUtils.js';
+import { mapState } from 'vuex';
+import { loadIndexs } from '@/api/index.js';
+import uniLoadMore from '@/components/uni-load-more/uni-load-more.vue';
+import empty from '@/components/empty';
+import uniCountdown from '@/components/uni-countdown/uni-countdown.vue';
+export default {
+	computed: {
+		...mapState('user', ['userInfo', 'hasLogin']),
+		...mapState(['addressData', 'addressPageShow'])
+	},
+	components: {
+		empty,
+		uniLoadMore,
+		uniCountdown
+	},
+	data() {
+		return {
+			scrollHeight: 0, // 底部分享按钮高度
+			checkedTab: 0, // 当前选中的切换页面
+			switchList: [
+				{
+					id: 1,
+					time: 'AA团',
+					name: '人人参与',
+					// sid: 128,	// 测试服
+					sid: 132,	// 正式服
+					list: [],
+					loadingType: 'more',
+					page: 1, //当前页数
+					limit: 3 //每次信息条数
+				},
+				{
+					id: 2,
+					time: '带货达人团',
+					name: '多人成团 不限人数',
+					// sid: 129,	// 测试服
+					sid: 131,	// 正式服
+					list: [],
+					loadingType: 'more',
+					page: 1, //当前页数
+					limit: 3 //每次信息条数
+				}
+			],
+			checkid:0,
+			//倒计时
+			hour: 0,//距离明天8点开始时间
+			minute: 0,
+			second: 0,
+			
+			starting: false,//判断活动未开始
+			Timeing:false,//判断活动进行中
+			
+			starthour:0,//距离今天开始时间
+			startminute:0,
+			startsecond:0,
+			
+			Timeinghour:0,//距离今天结束时间
+			Timeingminute:0,
+			Timeingsecond:0,
+			
+			workstarTime:'',
+			workendTime:'',
+		};
+	},
+	filters: {
+		parseIntTo(percent) {
+			percent = +percent * 100;
+			if (percent % 1 === 0) {
+				return percent;
+			} else {
+				percent = percent.toFixed(1);
+				return percent;
+			}
+		}
+	},
+	onLoad(option) {
+		// 判断是否登录
+		if (!this.hasLogin) {
+			interceptor();
+		}
+		// 判断有无邀请人
+		if (option.spread) {
+			uni.setStorageSync('spread', option.spread);
+		}
+		saveUrl();
+	},
+	onShow() {
+		this.Getlist();
+	},
+	//下拉刷新
+	onPullDownRefresh() {
+		let obj = this;
+		//监听下拉刷新动作的执行方法,每次手动下拉刷新都会执行一次
+		obj.loadData('refresh');
+	},
+	// 加载完成后重置无限加载商品包裹框高度
+	onReady() {
+		let obj = this;
+		// 处理数据加载完毕则加载数据
+		obj.onlodingTrue().then(e => {
+			obj.scrollHeight = e.pageHeight - e.topHeight - e.bottomHeight;
+			obj.loadData();
+		});
+	},
+	//分享
+	onShareAppMessage(options) {
+		// 设置菜单中的转发按钮触发转发事件时的转发内容
+		let shareObj = {
+			title: '点击进入拼团', // 默认是小程序的名称(可以写slogan等)
+			path: '/pages/groupBooking/index?spread=' + this.userInfo.uid, // 默认是当前页面,必须是以‘/’开头的完整路径
+			imageUrl: 'http://shicai.liuniu946.com/static/img/pinkShare.jpg',
+			success: function(res) {
+				// 转发成功之后的回调
+				if (res.errMsg == 'shareAppMessage:ok') {
+				}
+			},
+			fail: function() {
+				// 转发失败之后的回调
+				if (res.errMsg == 'shareAppMessage:fail cancel') {
+					// 用户取消转发
+				} else if (res.errMsg == 'shareAppMessage:fail') {
+					// 转发失败,其中 detail message 为详细失败信息
+				}
+			}
+		}; // 来自页面内的按钮的转发 // 返回shareObj
+		return shareObj;
+	},
+	methods: {
+		// 获取营业时间
+		async Getlist() {
+			loadIndexs({})
+				.then(({ data }) => {
+					let arr = data.sell_time.split(',');
+					this.workstarTime = arr[0];
+					this.workendTime = arr[1];
+					this.StartDate();
+					this.GetDate();
+				})
+				.catch(e => {
+					
+				});
+		},
+		//点击切换商品种类
+		change(index) {
+			// 当前选中的对象
+			this.checkedTab = index;
+			console.log(this.checkedTab,55)
+			this.loadData('tabChange');
+		},
+		StartDate() {
+			let obj = this;
+			console.log(obj.workstarTime)
+			console.log(this.workendTime)
+			// 获取当前时间
+			let now = new Date();
+			let year = now.getFullYear(); //得到年份
+			let month = now.getMonth();//得到月份
+			let date = now.getDate();//得到日期
+			let hour = now.getHours();//得到小时
+			let minu = now.getMinutes();//得到分钟
+			let sec = now.getSeconds();//得到秒
+			//获取早上开始营业的时间戳
+			let aa = this.workstarTime.split(':');
+			let bb = aa[0];
+			let cc = aa[1];
+			let dd = String(cc).split('');
+			let ff = dd[0];
+			let gg = dd[1];
+			console.log(bb,ff,gg)
+			let time1 = new Date(year,month,date,bb,ff,gg);
+			let morning = time1.getTime();
+			//获取现在时间的时间戳
+			let time2 = new Date(year,month,date,hour,minu,sec);
+			let present = time2.getTime();
+			//获取晚上结束营业的时间戳
+			let a = this.workendTime.split(':');
+			let b = a[0];
+			let c = a[1];
+			let d = String(c).split('');
+			let f = d[0];
+			let g = d[1];
+			console.log(b,f,g)
+			let time3 = new Date(year,month,date,b,f,g);
+			console.log(time1,'time1')
+			console.log(time3,'time3')
+			let night = time3.getTime();
+			//现在时间大于结束时间,活动结束
+			// if(present > time3){
+			// 	console.log('现在时间大于结束时间,活动结束')
+			// 	obj.end = true;
+			// }
+			//现在时间大于开始时间小于结束时间,活动进行中
+			if(present < time3 &&  present > time1){
+				console.log('现在时间大于开始时间小于结束时间,活动进行中')
+				obj.Timeing = true;
+				let starTime = time3 - present;
+				let hours = Math.floor((starTime / 1000 / 60 / 60) % 24); //获取剩余小时数
+				let minutes = Math.floor((starTime / 1000 / 60) % 60); //获取分钟
+				let seconds = Math.floor((starTime / 1000) % 60); //获取秒数
+				obj.Timeinghour = hours;
+				obj.Timeingminute = minutes;
+				obj.Timeingsecond = seconds;
+				 console.log('时间差是: '+ obj.Timeinghour + '小时, ' + obj.Timeingminute + '分钟, ' + obj.Timeingsecond + '秒','距离晚上22:00点结束');
+			}
+			//现在时间小于开始时间,活动还未开始
+			if(present < time1){
+				console.log('现在时间小于开始时间,活动还未开始')
+				obj.starting = true;
+				let  starTime = time1 - present;
+				let hours = Math.floor((starTime / 1000 / 60 / 60) % 24); //获取剩余小时数
+				let minutes = Math.floor((starTime / 1000 / 60) % 60); //获取分钟
+				let seconds = Math.floor((starTime / 1000) % 60); //获取秒数
+				obj.starthour = hours;
+				obj.startminute = minutes;
+				obj.startsecond = seconds;
+				 console.log('时间差是: '+ obj.starthour + '小时, ' + obj.startminute + '分钟, ' + obj.startsecond + '秒','距离早上7:00点开始');
+			}
+			//现在时间距离第二天开始时间
+			// day3.setTime(day3.getTime()+24*60*60*1000);
+			// var s3 = day3.getFullYear()+"-" + (day3.getMonth()+1) + "-" + day3.getDate();
+			
+		},
+		//获取明天早上7:00的时间戳
+		GetDate(){
+			let obj = this;
+			let now = new Date();
+			//现在时间转换成时间戳
+			let nowTime = now.getTime();
+			now.setTime(now.getTime()+24*60*60*1000);
+			let time = obj.workstarTime;
+			let data = now.getFullYear() + '-' + (now.getMonth() + 1) + '-' + now.getDate() + ' ' + time;
+			data = data.replace(/-/g, '/');
+			let time4 = new Date(data);
+			let tomorrow = time4.getTime();
+			let starTime = tomorrow - nowTime;
+			let hours = Math.floor((starTime / 1000 / 60 / 60) % 24); //获取剩余小时数
+			let minutes = Math.floor((starTime / 1000 / 60) % 60); //获取分钟
+			let seconds = Math.floor((starTime / 1000) % 60); //获取秒数
+			obj.hour = hours;
+			obj.minute = minutes;
+			obj.second = seconds;
+			console.log('时间差是: '+ hours + '小时, ' + minutes + '分钟, ' + seconds + '秒','距离第二天6:40开始');
+			
+		},
+		onlodingTrue() {
+			let obj = this;
+			return new Promise(function(resolve, reject) {
+				let num = 0;
+				let height = {
+					topHeight: 0,
+					bottomHeight: 0,
+					pageHeight: 0
+				};
+				// 初始化获取头部宽度
+				uni.createSelectorQuery()
+					.select('#pinkBanner')
+					.fields(
+						{
+							size: true
+						},
+						data => {
+							// 计算最多下拉的高度
+							height.topHeight = data.height;
+							num++;
+							if (num == 3) {
+								resolve(height);
+							}
+						}
+					)
+					.exec();
+				// 初始化获取底部分享宽度
+				uni.createSelectorQuery()
+					.select('.shareDate')
+					.fields(
+						{
+							size: true
+						},
+						data => {
+							// 计算最多下拉的高度
+							height.bottomHeight = data.height;
+							num++;
+							if (num == 3) {
+								resolve(height);
+							}
+						}
+					)
+					.exec();
+				// 初始化获取底部分享宽度
+				uni.createSelectorQuery()
+					.select('.container')
+					.fields(
+						{
+							size: true
+						},
+						data => {
+							// 计算最多下拉的高度
+							height.pageHeight = data.height;
+							num++;
+							if (num == 3) {
+								resolve(height);
+							}
+						}
+					)
+					.exec();
+			});
+		},
+		// 查询分类切换
+		changeTab(e) {
+			this.checkedTab = e.target.current;
+			this.loadData('tabChange');
+		},
+		// 请求商品列表
+		async loadData(source) {
+			console.log(source);
+			let obj = this;
+			//这里是将订单挂载到tab列表下
+			let index = obj.checkedTab;
+			let navItem = obj.switchList[index];
+			let state = navItem.state;
+			if (source === 'tabChange' && navItem.loaded === true) {
+				//tab切换只有第一次需要加载数据
+				return;
+			}
+			if (navItem.loadingType === 'loading') {
+				//防止重复加载
+				return;
+			}
+			if (navItem.loadingType === 'noMore') {
+				//防止重复加载
+				return;
+			}
+			if (source == 'refresh') {
+				navItem.page = 1;
+			}
+			// 修改当前对象状态为加载中
+			navItem.loadingType = 'loading';
+			getCombinationList({
+				type: navItem.sid,
+				page: navItem.page,
+				limit: navItem.limit
+			})
+				.then(({ data }) => {
+					console.log(source == 'refresh');
+					if (source == 'refresh') {
+						navItem.list = [];
+						uni.stopPullDownRefresh(); //停止下拉刷新动画
+					}
+					let arr = data.map(e => {
+						e.images = e.images.slice(0, 2);
+						return e;
+					});
+					console.log(arr);
+					navItem.list = navItem.list.concat(arr);
+					console.log(navItem);
+					navItem.page++;
+					// 判断是否是第一次加载
+					if (!navItem.loaded) {
+						obj.$set(navItem, 'loaded', true);
+						uni.hideLoading();
+					}
+					if (navItem.limit == data.length) {
+						//判断是否还有数据, 有改为 more, 没有改为noMore
+						navItem.loadingType = 'more';
+						return;
+					} else {
+						//判断是否还有数据, 有改为 more, 没有改为noMore
+						navItem.loadingType = 'noMore';
+					}
+					
+				})
+				.catch(e => {
+					console.log(e);
+				});
+		},
+		//加入购物车
+		Addcar(item) {
+			let obj = this;
+			uni.navigateTo({
+				url: '/pages/product/productGroup?id=' + item.id
+			});
+		},
+		//跳转商品详情页
+		navToDetailPage(ls) {
+			let obj = this;
+			let id = ls.id;
+			uni.navigateTo({
+				url: '/pages/product/productGroup?id=' + id
+			});
+		}
+	}
+};
+</script>
+<style lang="scss">
+page,
+.container {
+	background: #F3F3F4;
+	height: 100%;
+}
+.top-img {
+	width: 100%;
+	height: 180rpx;
+	image {
+		width: 100%;
+		height: 100%;
+	}
+}
+.tab-content {
+	.list-scroll-content {
+		height: 100%;
+	}
+}
+
+.switch-bar {
+	width: 100%;
+	font-size: 32rpx;
+	background-color: #FFFFFF;
+	.switchList {
+		padding: 28rpx 0rpx;
+		text-align: center;
+		width: 50%;
+		.time {
+			font-size: $font-lg;
+			font-weight: bold;
+		}
+		.name {
+			font-size: $font-sm;
+		}
+	}
+	.switchimg{
+		position: absolute;
+		left: 23%;
+		image{
+			width: 24rpx;
+			height: 13rpx;
+		}
+	}
+	.switchimgshow{
+		left:75%;
+	}
+	.active_color {
+		background: linear-gradient(270deg, #fe531e 0%, #fe9503 100%);
+		color: #ffffff;
+	}
+}
+.tip {
+	width: 100%;
+	height: 76rpx;
+	background-color: #FFFFFF;
+	}
+	.time-box{
+		width: 100%;
+		padding: 0rpx 25rpx;
+		font-size:27rpx;
+	}
+	.time-name{
+		font-size:27rpx;
+	}
+.preferred_centent {
+	padding:32rpx 20rpx;
+	width: 100%;
+	.tip {
+		padding: 25rpx 0rpx;
+		font-size: 28rpx;
+	}
+	.preferred_item {
+		width: 100%;
+		height: 100%;
+		padding: 25rpx 25rpx;
+		position: relative;
+		background-color: #FFFFFF;
+		border-radius: 15rpx;
+		margin-bottom: 15rpx;
+		.tlist-img {
+			width: 225rpx;
+			position: relative;
+			margin-right: 15rpx;
+			.leftImgIcon {
+				position: absolute;
+				top: 0;
+				left: 0;
+				font-size: 22rpx;
+				font-family: PingFangSC;
+				color: rgba(148, 71, 34, 1);
+				background: rgba(254, 242, 111, 1);
+				z-index: 99;
+				border-radius: 5rpx;
+				padding: 5rpx 10rpx;
+			}
+			.img {
+				width: 210rpx;
+				height: 210rpx;
+				image {
+					width: 100%;
+					height: 100%;
+					border-radius: 20rpx;
+				}
+			}
+			.stock {
+				margin-top: 13rpx;
+				font-size: 26rpx;
+				background: #fff1ee;
+				width: 100%;
+				color: #fb4912;
+				padding: 6rpx 0;
+				border-radius: 5rpx;
+				justify-content: center;
+				align-items: center;
+				position: absolute;
+				left: 0;
+				bottom: 0;
+				.img {
+					width: 20rpx;
+					height: 20rpx;
+					flex-shrink: 0;
+				}
+				.stock-num {
+					padding-left: 7rpx;
+					font-size: 22rpx;
+					border-radius: 5rpx;
+					height: 32rpx;
+					line-height: 32rpx;
+				}
+			}
+		}
+		.goods_name {
+			.goods_title {
+				padding-top: 15rpx;
+				color:rgba(0,0,0,1);
+				white-space: nowrap;
+				overflow: hidden;
+				text-overflow: ellipsis;
+				font-size:32rpx;
+				color: $font-color-dark;
+				height: 70rpx;
+				.text{
+					border-radius: 8rpx;
+					border: 2rpx solid #FF1A27;
+					color: #FF1A27;
+					padding:0rpx 10rpx;
+					font-size: 26rpx !important;
+					margin-right: 15rpx;
+					
+				}
+			}
+			.goods-height {
+				min-height: 60rpx;
+			}
+			.goods_num {
+				font-size: 26rpx;
+				color: #8f8f97;
+				padding-bottom: 15rpx;
+			}
+			.goods-peplo {
+				height: 45rpx;
+				margin-top: 15rpx;
+				.right {
+					color:#8e8e8e;
+					font-size: 24rpx;
+					width:195rpx;
+					image {
+						width: 30rpx;
+						height: 33rpx;
+						margin-right: 15rpx;
+					}
+				}
+				.goods-tip {
+					.peplo {
+						background:linear-gradient(14deg,rgba(255,116,37,1),rgba(255,30,41,1));
+						padding: 5rpx 10rpx;
+						color: #ffffff;
+						border-top-left-radius:8rpx;
+						border-bottom-left-radius: 8rpx;
+					}
+					.make {
+						background-color: #fef26f;
+						color: #944722;
+						border-top-right-radius: 8rpx;
+						border-bottom-right-radius: 8rpx;
+					}
+					.make,
+					.peplo {
+						font-size: $font-sm;
+						padding: 5rpx 10rpx;
+					}
+				}
+			}
+			.price {
+				font-size: 28rpx;
+				position: relative;
+				padding-top: 15rpx;
+				.price_list {
+					.price-red {
+						font-size: 30rpx !important;
+						font-family: Source Han Sans CN;
+						color: rgba(253, 27, 42, 1);
+						font-size: $font-base;
+						font-weight: bold;
+						.moneyIcon {
+							font-weight: normal !important; 
+						}
+						.money {
+							font-size: 58rpx;
+						}
+						.moneyType {
+							font-weight: 400;
+						}
+						.outMoney {
+							font-weight: 400;
+							text-decoration: line-through;
+							color: rgba(142, 142, 142, 1);
+						}
+					}
+					.price-green {
+						color: #2dbd59;
+						font-size: 26rpx !important;
+						font-weight: bold;
+						text {
+							background: linear-gradient(45deg, rgba(21, 197, 52, 1), rgba(21, 197, 52, 1));
+							color: #ffffff;
+							padding: 0rpx 10rpx;
+							border-radius: 7rpx;
+							font-size: 24rpx !important;
+							margin-left: 15rpx;
+						}
+					}
+				}
+				.img {
+					width: 265rpx;
+					height: 74rpx;
+					line-height: 74rpx;
+					background:linear-gradient(14deg,rgba(255,116,37,1),rgba(255,30,41,1));
+					border-radius: 99rpx;
+					color: #ffffff;
+					font-size: $font-lg;
+					text-align: center;
+				}
+				.tomorrow {
+					background: #29a66e;
+					color: #ffffff;
+					border-radius: 25rpx;
+					padding: 10rpx 25rpx;
+				}
+			}
+		}
+	}
+}
+.shareDate {
+	width: 100%;
+	font-size: 28rpx;
+	background: linear-gradient(270deg, #fe531e 0%, #fe9503 100%);
+	padding: 25rpx 0rpx;
+	line-height: 1;
+	text-align: center;
+	color: #ffffff;
+	position: fixed;
+	bottom: 0;
+	border: none;
+	border-radius: 0rpx !important;
+}
+</style>

+ 421 - 0
pages/groupBooking/common/nowList.vue

@@ -0,0 +1,421 @@
+<template>
+	<view class="other">
+		<view class="other-1">大家还在拼</view>
+		
+		<view class="preferred_item" v-for="item in recommendedlist" @click.stop="ToKaiTuan(item)">
+			<view class="flex_item" style="overflow: hidden;">
+				<view class="tlist-img">
+					<view class="leftImgIcon">AA团</view>
+					<!-- <view class="leftImgIcon" v-if="sid == 129">达人团</view> -->
+					<view class="img"><image :src="item.image" mode="scaleToFill"></image></view>
+				</view>
+				<view class="tlist-img " v-for="imgItem in item.images">
+					<view class="img"><image :src="imgItem" mode="scaleToFill"></image></view>
+				</view>
+			</view>
+			<view class="goods_name">
+				<view class="goods_title flex_item">
+					<view class="text">{{ item.min_people }}人团</view>
+					<view class="title">{{ item.title }}</view>
+				</view>
+				<view class="goods-height">
+					<!-- <view class="goods_num clamp">{{ item.info }}</view> -->
+					<view class="flex goods-peplo">
+						<view class="goods-tip flex_item">
+							<view class="peplo">库存剩{{ item.percent | parseIntTo }}%</view>
+							<view class="make">{{ item.mark }}</view>
+						</view>
+						<view class="right flex_item">
+							<image src="/static/icon/hot.png" mode="aspectFill"></image>
+							<text>已拼{{ item.sales }}份</text>
+						</view>
+					</view>
+				</view>
+				<view class="price flex">
+					<view class="price_list">
+						<view class="price-red">
+							<text>单人仅付:</text>
+							<text class="moneyIcon">¥</text>
+							<text class="money">{{ item.price }}</text>
+							<text class="moneyType">/{{ item.unit_name }}</text>
+							<!-- <text class="outMoney">¥{{ item.product_price }}</text> -->
+						</view>
+					</view>
+					<view class="img position-relative" @click.stop="ToKaiTuan(item)">去开团</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+export default {
+	props: {
+		recommendedlist: {
+			type: Array,
+			default: function() {
+				return {
+				};
+			}
+		}
+	},
+	data() {
+		return {};
+	},
+	filters: {
+		parseIntTo(percent) {
+			percent = +percent * 100;
+			if (percent % 1 === 0) {
+				return percent;
+			} else {
+				percent = percent.toFixed(1);
+				return percent;
+			}
+		}
+	},
+	methods: {
+		// 去开团
+		ToKaiTuan(item) {
+			console.log(8754847)
+			let id = item.id;
+			uni.navigateTo({
+				url: '/pages/product/productGroup?id=' + id
+			});
+		},
+	}
+};
+</script>
+
+<style lang="scss">
+.other{
+		.other-1{
+			font-size:27rpx;
+			color:#333333;
+			line-height: 55rpx;
+		}
+		
+		.preferred_item {
+			width: 100%;
+			height: 100%;
+			padding: 25rpx 25rpx;
+			position: relative;
+			background-color: #FFFFFF;
+			border-radius: 15rpx;
+			margin-bottom: 15rpx;
+			.tlist-img {
+				width: 225rpx;
+				position: relative;
+				margin-right: 15rpx;
+				.leftImgIcon {
+					position: absolute;
+					top: 0;
+					left: 0;
+					font-size: 22rpx;
+					font-family: PingFangSC;
+					color: rgba(148, 71, 34, 1);
+					background: rgba(254, 242, 111, 1);
+					z-index: 99;
+					border-radius: 5rpx;
+					padding: 5rpx 10rpx;
+				}
+				.img {
+					width: 210rpx;
+					height: 210rpx;
+					image {
+						width: 100%;
+						height: 100%;
+						border-radius: 20rpx;
+					}
+				}
+				.stock {
+					margin-top: 13rpx;
+					font-size: 26rpx;
+					background: #fff1ee;
+					width: 100%;
+					color: #fb4912;
+					padding: 6rpx 0;
+					border-radius: 5rpx;
+					justify-content: center;
+					align-items: center;
+					position: absolute;
+					left: 0;
+					bottom: 0;
+					.img {
+						width: 20rpx;
+						height: 20rpx;
+						flex-shrink: 0;
+					}
+					.stock-num {
+						padding-left: 7rpx;
+						font-size: 22rpx;
+						border-radius: 5rpx;
+						height: 32rpx;
+						line-height: 32rpx;
+					}
+				}
+			}
+			.goods_name {
+				.goods_title {
+					padding-top: 15rpx;
+					color:rgba(0,0,0,1);
+					// white-space: nowrap;
+					// overflow: hidden;
+					// text-overflow: ellipsis;
+					font-size:32rpx;
+					color: $font-color-dark;
+					// height: 70rpx;
+					align-items: baseline;
+					.text{
+						border-radius: 8rpx;
+						border: 2rpx solid #FF1A27;
+						color: #FF1A27;
+						padding:0rpx 10rpx;
+						font-size: 26rpx !important;
+						margin-right: 15rpx;
+						
+					}
+					.title {
+						width: 80%;
+						overflow : hidden;
+						text-overflow: ellipsis;
+						display: -webkit-box;
+						-webkit-line-clamp: 2;
+						-webkit-box-orient: vertical;
+					}
+				}
+				.goods-height {
+					min-height: 60rpx;
+				}
+				.goods_num {
+					font-size: 26rpx;
+					color: #8f8f97;
+					padding-bottom: 15rpx;
+				}
+				.goods-peplo {
+					height: 45rpx;
+					margin-top: 15rpx;
+					.right {
+						color:#8e8e8e;
+						font-size: 24rpx;
+						width:195rpx;
+						image {
+							width: 30rpx;
+							height: 33rpx;
+							margin-right: 15rpx;
+						}
+					}
+					.goods-tip {
+						.peplo {
+							background:linear-gradient(14deg,rgba(255,116,37,1),rgba(255,30,41,1));
+							padding: 5rpx 10rpx;
+							color: #ffffff;
+							border-top-left-radius:8rpx;
+							border-bottom-left-radius: 8rpx;
+						}
+						.make {
+							background-color: #fef26f;
+							color: #944722;
+							border-top-right-radius: 8rpx;
+							border-bottom-right-radius: 8rpx;
+						}
+						.make,
+						.peplo {
+							font-size: $font-sm;
+							padding: 5rpx 10rpx;
+						}
+					}
+				}
+				.price {
+					font-size: 28rpx;
+					position: relative;
+					padding-top: 15rpx;
+					.price_list {
+						.price-red {
+							font-size: 30rpx !important;
+							font-family: Source Han Sans CN;
+							color: rgba(253, 27, 42, 1);
+							font-size: $font-base;
+							font-weight: bold;
+							.moneyIcon {
+								font-weight: normal !important; 
+							}
+							.money {
+								font-size: 58rpx;
+							}
+							.moneyType {
+								font-weight: 400;
+							}
+							.outMoney {
+								font-weight: 400;
+								text-decoration: line-through;
+								color: rgba(142, 142, 142, 1);
+							}
+						}
+						.price-green {
+							color: #2dbd59;
+							font-size: 26rpx !important;
+							font-weight: bold;
+							text {
+								background: linear-gradient(45deg, rgba(21, 197, 52, 1), rgba(21, 197, 52, 1));
+								color: #ffffff;
+								padding: 0rpx 10rpx;
+								border-radius: 7rpx;
+								font-size: 24rpx !important;
+								margin-left: 15rpx;
+							}
+						}
+					}
+					.img {
+						width: 265rpx;
+						height: 74rpx;
+						line-height: 74rpx;
+						// background:linear-gradient(14deg,rgba(255,116,37,1),rgba(255,30,41,1));
+						background: linear-gradient(270deg, rgba(181,116,242, 1) 0%, rgba(139,86,254, 1) 100%);
+						border-radius: 99rpx;
+						color: #ffffff;
+						font-size: $font-lg;
+						text-align: center;
+					}
+					.img1{
+						background-color: #D3D3D3;
+						width: 265rpx;
+						height: 74rpx;
+						line-height: 74rpx;
+						border-radius: 99rpx;
+						color: #ffffff;
+						font-size: $font-lg;
+						text-align: center;
+					}
+					.tomorrow {
+						background: #29a66e;
+						color: #ffffff;
+						border-radius: 25rpx;
+						padding: 10rpx 25rpx;
+					}
+				}
+			}
+		}
+		
+		
+		.other-2{
+			width: 100%;
+			background:#ffffff;
+			padding: 10rpx 15rpx ;
+			border-radius: 20rpx;
+			.content-row{
+				padding: 10rpx 0;
+				.row-1{
+					width: 210rpx;
+					position: relative;
+					margin-right: 20rpx;
+					text-align: center;
+					.row-1-1{
+						text-align: center;
+						height:40rpx;
+						background:#fff1ee;
+						border-radius:6rpx;
+						font-size:22rpx;
+						font-weight:500;
+						color:#fb4912;
+						line-height:40rpx;
+						image{
+							width: 23rpx;
+							height: 23rpx;
+							margin-right: 5rpx;
+						}
+					}
+					.img1{
+						width:170rpx;
+						height:170rpx;
+						border-radius:10rpx;
+					}
+					.img2{
+						position: absolute;
+						top: 0;
+						left: 16rpx;
+						width:80rpx;
+						height:32rpx;
+						border-radius:5px;
+					}
+				}
+				.row-2{
+					padding: 20rpx 0 20rpx 0;
+					width:calc(100% - 210rpx);
+					position: relative;
+					
+					border-bottom: 1px solid #EAEAEA;
+					.word-1{
+						font-size:32rpx;
+						font-weight:bold;
+						color:#141821;
+						margin-left: 10rpx;
+						overflow: hidden;
+						text-overflow: ellipsis;
+						white-space: nowrap;
+					}
+					.word-2{
+						margin-top: 10rpx;
+						font-size:24rpx;
+						color:#979797;
+					}
+					.word-3{
+						margin-top: 10rpx;
+						position: relative;
+						font-size:20rpx;
+						color:#ffffff;
+						image{
+							width: 235rpx;
+							height: 50rpx;
+						}
+						.word-3-1{
+							position: absolute;
+							top:8px;
+							left:2px;
+							width: 230rpx;
+							text-align: center;
+							.word-3-1-1{
+								display: inline-block;
+								color:#FD1B2A;
+								width: 50%;
+							}
+							
+						}
+					}
+					.word-4{
+						margin-top: 15rpx;
+						font-size:23rpx;
+						color:#fd1b2a;
+						margin-left: 10rpx;
+						text{
+							font-size:23rpx;
+							font-weight:bold;
+						}
+						.word-4-1{
+							font-size:36rpx;
+						}
+					}
+					.word-5{
+						margin-top: 15rpx;
+						font-size:21rpx;
+						color:#868686;
+					}
+					.button{
+						width:145rpx;
+						height:60rpx;
+						background:linear-gradient(14deg,#ff7425,#ff1e29);
+						border-radius:30rpx;
+						font-size:27rpx;
+						font-weight:bold;
+						color:#ffffff;
+						line-height:60rpx;
+						text-align: center;
+						
+						position: absolute;
+						bottom: 20rpx;
+						right: 0;
+					}
+				}
+			}
+		}
+	}
+</style>

+ 390 - 0
pages/groupBooking/detail.vue

@@ -0,0 +1,390 @@
+<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="(item , i) in people" :key='i'>
+						    <view class="lyy-y bg-gray"><image :src="item.avatar" class="user-list-img" /></view>
+						    <view class="lyy-y-word clamp">{{ item.nickname }}</view>
+						</view>
+						<view class="user-list" v-for="(l, i) in peopleNub" :key="i">
+							<view class="lyy-y bg-gray"></view>
+							<view class="lyy-y-word clamp">待邀请</view>
+						</view>
+					</view>
+				</view>
+				<view class="lyy-b-jz flex">
+					<view class="lyy-b-but" v-if="status == 1 && pinkBool == 0" @click="invitation">邀请好友参团</view>
+					<view class="lyy-b-but" v-if="status == 0&&pinkBool==0" @click="goBuy">立即加入</view>
+					<!-- <view class="lyy-b-but" @click="goBuy">立即加入</view> -->
+					<view class="lyy-b-but bg-gray" v-if="pinkBool == -1">拼团失败</view>
+					<view class="lyy-b-but" v-if="pinkBool == 1">拼团成功</view>
+				</view> 
+			</view>
+		</view>
+		<view class="lyy-hx"></view>
+		<!-- 第三部分 -->
+		<view class="lyy-c">
+			<view class="lyy-c-p">
+				<view class="lyy-c-word">
+					<view>拼团规则:</view>
+					<view>1.点击商品进入商品详情,通过超值拼团进入订单支付 页,用户付款成功后,按页面提示分享给微信好友。</view>
+					<view>2.好友通过分享,加入超值拼团,完成订单支付,待达成 拼团人数后,拼团成功。</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+import 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: [], //拼团成员信息
+			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>

+ 2318 - 0
pages/groupBooking/groupdetails.vue

@@ -0,0 +1,2318 @@
+<template>
+	<view class="container">
+		<view class="reds"></view>
+		<view class="conter">
+			<!-- <view class="tips flex_center_down_center" v-if="state == 1">
+				<image src="../../static/error/missing-face.png"></image>
+				<text >79 拼团成功</text>
+			</view> -->
+			<view class="details flex-between-center" v-if="state == 1">
+				<view class="left-img" @click="ToGroup(goods)">
+					<image :src="goods.image"></image>
+					<image class="left-img1" v-if=" types == 1" src="https://shicai.liuniu946.com/img/img69.png"></image>
+					<image class="left-img1" v-if=" types == 2" src="https://shicai.liuniu946.com/img/img70.png"></image>
+				</view>
+				<view class="right-word">
+					<view class="one">{{goods.title}}</view>
+					<view class="two m-t10">
+						<view class="three" v-if=" types == 1">
+							<text>{{ goods.mark }}</text>
+						</view>
+						<view class="three" v-if=" types != 1">
+							<text>{{ goods.mark }}</text>
+						</view>
+						<!-- <text class="two-1">单买价¥{{goods.product_price}}</text> -->
+						<text class="two-2" @click="ToGroup(goods)">商品详情></text>
+					</view>
+					<!-- <view class="word-3" v-if="status == 1 && types == 1">
+						<view class="word-3-1">
+							<text class="word-text">本单人头奖</text>
+							<text class="word-3-1-1">{{parseFloat(goods.people_prize)}}元</text></view>
+						<image class="wenhao" src="../../static/icon/wenhao.png" @click="navTo('/pages/rule/AAjiangjin')"></image>
+					</view> -->
+					<view class="six" v-if="status == 1 && types == 1">
+						<!-- <image src="https://shicaitest.liuniu946.com/img/img80.png"></image> -->
+						<view>
+							<view class="six-1">
+								<text class="six-text">本单邀请奖</text>
+							<text class="six-red">{{parseFloat(goods.people_prize)}}元/人</text></view>
+							<view class="six-2">
+								<text class="six-text2">本单奖金共</text>
+								<text class="six-red">{{ parseInt(goods.people_prize) * (people.length + 1) }}元</text>
+							</view>
+						</view><!-- pages/rule/DaRjiangjin 达人团奖金 -->
+						<image class="wenhao-six" src="../../static/icon/wenhao.png" @click="navTo('/pages/rule/AAjiangjin')"></image>
+					</view>
+
+					
+					<view class="four m-t5">
+						<text >拼团价¥</text>
+						<text class="four-1">{{goods.price}}</text>
+					</view>
+					<view class="five m-t10">
+						<text >已拼{{order_count || '0' }}份</text>
+					</view>
+				</view>
+			</view>
+			<view class="participate" >
+				<view class="rows-1" v-if="state == 1">
+					<!-- AA团 -->
+					<view class="participate-1" v-if="(1 + people.length) <= pinkT.max_people && types == 1">还差<text>{{peopleNub}}</text>人拼团成功</view>
+					
+					<view class="participate-2" v-if="types == 1">邀请好友参与,共享低价好物</view>
+					
+					
+					<!-- 达人团 -->
+					<!-- 人数不足 -->
+					<view class="participate-1" v-if="(people.length) <= pinkT.min_people && types == 2">还差<text>{{pinkT.min_people - people.length }}</text>人拼团成功</view>
+					<view class="participate-1" v-if="types == 2 && (people.length) >= pinkT.min_people">已有<text>{{people.length}}</text>人参与,拼团成功</view>
+					<!-- 人数不足 团长 -->
+					<view class="participate-2" v-if="status == 1 && types == 2 && (people.length) < pinkT.min_people">邀请好友参与,共享低价好物</view>
+					<!-- 人数不足 团员 -->
+					<view class="participate-2" v-if=" status != 1 && types == 2 && (people.length) < pinkT.min_people">分享好友,达到{{pinkT.min_people}}人即可拼团成功</view>
+
+					<!-- 人数满足 -->
+					<!-- 人数满足 团长 -->
+					<view class="participate-2" v-if=" status == 1 && types == 2 && people.length >= pinkT.min_people">拼团已成功,还可继续分享,赚取更高佣金提成</view>
+					<!-- 人数满足 团员 -->
+					<view class="participate-2" v-if=" status != 1 && types == 2 && people.length >= pinkT.min_people">还可继续分享,邀请好友共享低价好物</view>
+					
+					<!-- <view class="participate-1" v-if="(1 + people.length) == pinkT.max_eople">已有<text>{{people.length}}</text>人参与,拼团成功</view> -->
+					<!-- <view class="participate-one" v-if=" i == 1">发起拼团</view> -->
+					<!-- <view class="participate-2" v-if=" i == 1">与<text class="participate-red">附近的人</text>一起享受优惠</view> -->
+					<view class="participate-3 flex-center">
+						<view>剩余</view>
+						<uni-countdowns
+							color="#000000"
+							background-color="#F5F5F7"
+							splitor-color="#000000"
+							:show-day="false"
+							:day="stopTime.stopTimeD"
+							:hour="stopTime.stopTimeH"
+							:minute="stopTime.stopTimeM"
+							:second="stopTime.stopTimeS"
+						></uni-countdowns>
+					</view>
+					<view class="participate-4" :class="{PinkCenter: pinkT.max_people < 5 }" v-if="pinkT.max_people < 5">
+						<view class="participate-4-1">
+							<image :src="pinkT.avatar"></image>
+							<image class="participate-4-1-1" src="../../static/img/img73.png"></image>
+						</view>
+						<view class="participate-4-1" v-for="(item , i) in people" :key='i'>
+						   <image :src="item.avatar" />
+						</view>
+						<!-- <view class="participate-4-1" v-for="(l, i) in peopleNub" :key="i">
+							<view class="lyy-y bg-gray"></view>
+						</view> -->
+						<!-- AA团 -->
+						<view class="participate-4-1" v-if="types == 1" v-for="item in peopleNub">
+							<image src="https://shicai.liuniu946.com/img/img72.png"></image>
+						</view>
+					
+						<!-- 达人团 -->
+						<view class="participate-4-1" v-if="types == 2 " v-for="item in peopleNub + 1" >
+							<image src="https://shicai.liuniu946.com/img/img72.png"></image>
+						</view>
+						
+						<view class="participate-4-1" v-if=" i == 1">
+							<image src="https://shicai.liuniu946.com/img/img81.png"></image>
+						</view>
+					</view>
+					<scroll-view class="pinkT-Box" scroll-x="true" v-if="pinkT.max_people >= 5">
+						<view class="participate-4">
+							<view class="participate-4-1">
+								<image :src="pinkT.avatar"></image>
+								<image class="participate-4-1-1" src="../../static/img/img73.png"></image>
+							</view>
+							<view class="participate-4-1" v-for="(item , i) in people" :key='i'>
+							   <image :src="item.avatar" />
+							</view>
+							<!-- <view class="participate-4-1" v-for="(l, i) in peopleNub" :key="i">
+								<view class="lyy-y bg-gray"></view>
+							</view> -->
+							<!-- <view class="participate-4-1" v-for="item in peopleNub " >
+								<image src="https://shicai.liuniu946.com/img/img72.png"></image>
+							</view> -->
+							<!-- AA团 -->
+							<view class="participate-4-1" v-if="types == 1" v-for="item in peopleNub">
+								<image src="https://shicai.liuniu946.com/img/img72.png"></image>
+							</view>
+												
+							<!-- 达人团 -->
+							<view class="participate-4-1" v-if="types == 2 " v-for="item in peopleNub + 1" >
+								<image src="https://shicai.liuniu946.com/img/img72.png"></image>
+							</view>
+							
+							<view class="participate-4-1" v-if=" i == 1">
+								<image src="https://shicai.liuniu946.com/img/img81.png"></image>
+							</view>
+						</view>
+					</scroll-view>
+					
+				</view>
+				
+				<!-- 拼团成功  AA团-->
+				<view class="rows-2" v-if="state == 2">
+					<view class="rows-2-1" >拼团成功</view>
+					<view class="rows-2-2">商品正在准备中</view>
+					<view class="rows-2-3" >
+						<scroll-view scroll-x class="rows-2-3-1" >
+							<view class="PinkT-success">
+								<view class="pinkTuan">
+									<image :src="pinkT.avatar"></image>
+									<image 
+										style="
+											width: 60rpx;
+											height: 30rpx;
+											border-radius: 0;
+											position: absolute;
+											bottom: 0;
+											left: 14rpx;" 
+										src="../../static/img/img73.png"></image>
+								</view>
+								<view v-for="(item , i) in people" :key='i' class="flex-between-center">
+									<view style="width: 33%;">
+										<image :src="item.avatar"/>
+									</view>
+								</view>
+							</view>
+						</scroll-view>
+						<!-- <view class="rows-2-3-2" v-if="(1 + people.length) > 3">
+							<image src="https://shicaitest.liuniu946.com/img/img74.png" />
+						</view> -->
+						<!-- <view><image src="https://shicaitest.liuniu946.com/img/touxiang3.jpg"></image></view>
+						<view><image src="https://shicaitest.liuniu946.com/img/touxiang3.jpg"></image></view>
+						<view><image src="https://shicaitest.liuniu946.com/img/touxiang3.jpg"></image></view> -->
+					</view>
+				</view>
+				<view v-if="state == 1">
+					<view class="participate-5" v-if="status == 1 && userBool == 1 " @click="openshare">邀请好友参团</view>
+					<view class="participate-5" v-if="status != 1 && userBool == 0 " @click="goBuy" >立即参团</view>
+					<view class="participate-5" v-if="status != 1 && userBool == 1 " @click="openshare" >分享给好友</view>
+				</view>
+				
+				<view class="participate-5" v-if="state == 2 && status != 1" @click="GoDingdan">查看订单及团长信息</view>
+				
+				<view class="participate-5" v-if="state == 2 && status == 1" @click="GoDingdan">查看订单及团员信息</view>
+				
+				<view class="participate-6"></view>
+				<view class="participate-7 flex-between-center">
+					<view class="participate-7-1">
+						<text class="word" v-if=" types != 1">达人团</text>
+						<text class="word" v-if=" types == 1">AA团</text>
+						<text>玩法</text>
+					</view>
+					<view class="participate-7-1" @click="goRule">
+						<text class="word1">详细规则</text>
+						<image src="../../static/img/img74.png"></image>
+					</view>
+				</view>
+				<view class="participate-8 flex-between-center">
+					<view class="participate-8-1">
+						<image class="img1" src="https://shicai.liuniu946.com/img/img76.png"></image>
+						<view class="word-1">开团/参团</view>
+						<view class="word-2">拼团享低价</view>
+					</view>
+					<image src="https://shicai.liuniu946.com/img/img75.png"></image>
+					<view class="participate-8-1">
+						<image class="img2" src="https://shicai.liuniu946.com/img/img77.png"></image>
+						<view class="word-1">邀请邻里参团</view>
+						<view class="word-2">分享优惠多</view>
+					</view>
+					<image src="https://shicai.liuniu946.com/img/img75.png"></image>
+					<view class="participate-8-1">
+						<image class="img3" src="https://shicai.liuniu946.com/img/img78.png"></image>
+						<view class="word-1">人满发货</view>
+						<view class="word-2">人不满退款</view>
+					</view>
+				</view>
+			</view>
+			<!-- 达人团显示团长信息 -->
+			<view class="infos" v-if="types == 2">
+				<view class="PinkT-title">
+					团长信息
+				</view>
+				<view class="PinkT-info">
+					<view class="info-img">
+						<image :src="pinkT.avatar"></image>
+						<image class="PinkT-tuanzhang" src="../../static/img/img73.png"></image>
+					</view>
+					<view class="PinkT-right">
+						<view class="PinkT-right-box">
+							<view class="PinkT-text">
+								{{pinkT.user_address}}
+							</view>
+						</view>
+						<view class="PinkT-last">
+							<view class="PinkT-text" style="margin-right: 10rpx;">
+								{{pinkT.nickname}}
+							</view>
+							<view class="PinkT-text">
+								{{pinkT.user_phone}}
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+			
+			<view class="info" v-if="state == 2">
+				<view class="info-top">
+					<view class="top-left">
+						<image :src="image" class="left-img"></image>
+						<view class="left-box">
+							<view class="left-tit">
+								{{goodsinfo.store_name}}
+							</view>
+							<!-- <view class="left">
+								规格:10枚
+							</view> -->
+							<view class="left">
+								单价:¥{{goodsinfo.price}}
+							</view>
+							<view class="left">
+								数量:{{cart_info.cart_num}}
+							</view>
+						</view>
+					</view>
+					<!-- <view class="top-right">
+						¥0
+					</view> -->
+				</view>
+				<view class="info-pic">
+					<view class="pic-left">
+						商品支付金额
+					</view>
+					<view class="pic-right">
+						¥{{shopinfo.pay_price}}
+					</view>
+				</view>
+				<view class="info-pic">
+					<view class="pic-left">
+						到货时间
+					</view>
+					<view class="pic-right red">
+						{{shopinfo.mark}}
+					</view>
+				</view>
+			</view>
+			<view class="infos" v-if="state == 2">
+				<view class="info-pic">
+					<view class="pic-left">
+						收货地址
+					</view>
+					<view class="pic-right">
+						{{shopinfo.user_address}}
+					</view>
+				</view>
+				<view class="info-pic">
+					<view class="pic-left">
+						电话
+					</view>
+					<view class="pic-right red">
+						{{shopinfo.user_phone}}
+					</view>
+				</view>
+				<!-- <view class="info-pic">
+					<view class="pic-left">
+						配送时间
+					</view>
+					<view class="pic-right red">
+						2020-07-05 21:43:31 
+					</view>
+				</view> -->
+			</view>
+			
+			<!-- 大家还在拼 AA团-->
+			<now-list v-if="types == 1" :recommendedlist="recommendedlist"></now-list>
+			
+			
+			<!-- 该团长还发起了以下拼团  达人团-->
+			<view class="other" v-if="types == 2">
+				<view class="other-1">该团长还发起了以下拼团</view>
+				
+				<view class="preferred_item" v-for="item in PinkTList" @click.stop="ToKaiTuan(item)">
+					<view class="flex_item" style="overflow: hidden;">
+						<view class="tlist-img">
+							<view class="leftImgIcon" v-if="item.pink_type =='AA团'">AA团</view>
+							<view class="leftImgIcon" v-if="item.pink_type =='达人团'">达人团</view>
+							<!-- <view class="leftImgIcon" v-if="sid == 129">达人团</view> -->
+							<view class="img"><image :src="item.image" mode="scaleToFill"></image></view>
+						</view>
+						<view class="tlist-img " v-for="imgItem in item.images">
+							<view class="img"><image :src="imgItem" mode="scaleToFill"></image></view>
+						</view>
+					</view>
+					<view class="goods_name">
+						<view class="goods_title flex_item">
+							<view class="text">{{ item.min_people }}人团</view>
+							<view class="title">{{ item.title }}</view>
+						</view>
+						<view class="goods-height">
+							<!-- <view class="goods_num clamp">{{ item.info }}</view> -->
+							<view class="flex goods-peplo">
+								<view class="goods-tip flex_item">
+									<view class="peplo">库存剩{{ item.percent | parseIntTo }}%</view>
+									<view class="make">{{ item.mark }}</view>
+								</view>
+								<view class="right flex_item">
+									<image src="/static/icon/hot.png" mode="aspectFill"></image>
+									<text>已拼{{ item.sales }}份</text>
+								</view>
+							</view>
+						</view>
+						<view class="price flex">
+							<view class="price_list">
+								<view class="price-red">
+									<text v-if="item.pink_type == 'AA团'">单人仅付:</text>
+									<text class="moneyIcon">¥</text>
+									<text class="money">{{ item.price }}</text>
+									<text class="moneyType">/{{ item.unit_name }}</text>
+									<text class="outMoney" v-if="item.pink_type == '达人团'">¥{{ item.product_price }}</text>
+								</view>
+							</view>
+							<!-- 团长 -->
+							<view v-if="status == 1 " class="img position-relative" @click.stop="ToCanTuan(item)">查看拼团</view>
+							<!-- 团员 -->
+							<view v-if="status != 1 " class="img position-relative" @click.stop="ToCanTuan(item)">去参团</view>
+						</view>
+					</view>
+				</view>
+			</view>
+
+		</view>
+		
+		<!-- <uni-popup ref="popup1" type="center" >
+			<view class="popup1">
+				<view class="popup-1">
+					为确保该区域不出现多个团长同时团 请输入您的电话号码,我们将对您发起的 团购进行判定
+				</view>
+				<view class="popup-2">确认</view>
+			</view>
+		</uni-popup>
+		<uni-popup ref="popup2" type="center" >
+			<view class="popup2">
+				<view class="popup2-1">
+					是否付款?
+				</view>
+				<view class="popup2-2 flex-between-center">
+					<view class="one">是</view>
+					<view class="one">否</view>
+				</view>
+			</view>
+		</uni-popup>
+		 -->
+		<uni-popup ref="share" type="center" >
+				<view class="share-box">
+					<view class="share-tit">
+						<!-- 10枚洋鸡蛋低至<text>19</text>元, -->
+						赶紧邀请认识的人来拼团吧
+					</view>
+						<view class="share-tit2">
+							美天选菜平台配送范围有限,建议分享给您附近的朋友或邻居                            
+						</view>
+						<view class="share-footbox">
+							<button class="share-icon button-share" open-type="share" @click="closeshare">
+								<image src="https://shicai.liuniu946.com/img/icon-wx.png" class="icon"></image>
+								<view class="share-txt" style="line-height: 1;margin-top: 4rpx;">邀请好友</view>
+							</button>
+							<view class="share-icon" @click="open">
+								<image src="https://shicai.liuniu946.com/img/icon-wx2.png" class="icon"></image>
+								<view class="share-txt">朋友圈</view>
+							</view>
+						</view>
+			    </view>
+			</uni-popup>
+			
+			<view class="mask" v-show="maskshow" @click="maskshow = false">
+				<image class="close" src="../../static/icon/close.png"></image>
+				<image @longpress="saveImg()" @tap="maskshow = false" mode="widthFix" :src="posturl"></image>
+				<view class="save-btn" @click="savePost">保存图片</view>
+			</view>
+			
+			<!-- 团长填写-->
+			<!-- <uni-popup ref="popPhone" type="center" :maskClick="false">
+				<view class="pop-box">
+					<view class="pop-tit">为确保该区域不出现多个团长同时团,请输入您的电话号码,我们将对您发起的团购进行判定</view>
+					<view class="pop-buttom">
+						<input type="number" placeholder="清输入您的手机号" />
+					</view>
+					<view class="pop-qr" @click="queren">确认</view>
+				</view>
+			</uni-popup> -->
+		<view class="foot" @click="openshare">分享给好友</view>
+		
+		<uni-popup ref="popup" type="center">
+			<view class="pop-box">
+				<view class="pop-text">
+					为了方便您查看您的拼团详细状况,我们需要您的通知授权
+				</view>
+				<view class="pop-button" @click="xiaoxi()">
+					开启通知
+				</view>
+			</view>
+		</uni-popup>
+		
+		<!-- 返回按钮 -->
+		<return-button></return-button>
+	</view>
+</template>
+
+<script>
+import uniCountdowns from '@/components/uni-countdown/uni-countdowns.vue';
+import uniPopup from '@/components/uni-popup/uni-popup.vue';
+import { getCombinationLisPink, getCombinationPoster } from '@/api/groupBooking.js';
+import { timeComputed } from '@/utils/rocessor.js';
+import { orderMake, nowPinkLst, pinkTAllList } from '@/api/order.js';
+import { mapState } from 'vuex';
+// 返回按钮
+import returnButton from '@/pages/return/returnButton.vue';
+// 大家还在拼
+import NowList from './common/nowList.vue';
+export default {
+	filters: {
+		parseIntTo(percent) {
+			percent = +percent * 100;
+			if (percent % 1 === 0) {
+				return percent;
+			} else {
+				percent = percent.toFixed(1);
+				return percent;
+			}
+		}
+	},
+	computed: {
+		...mapState(['baseURL', 'urlFile']),
+		...mapState('user',['userInfo']),
+		// 还需要报名的人数
+		peopleNub() {
+			return this.pinkT.max_people - 1 - this.people.length;
+		},
+		//最后成团时,销售额佣金百分比
+		percentage(){
+			
+			if((1 + this.people.length) >= this.pinkT.min_people)
+			{
+				let number;
+				// AA团
+				if( this.types == 1 ) {
+					number = this.people.length + 1;	//现有人数
+				}
+				// 达人团
+				if( this.types == 2 ) {
+					number = this.people.length;	//现有人数
+				}
+				
+				let size = number - this.pinkT.min_people;
+				let percentage = (parseInt(size) / parseInt(this.upgrade_people_nums)) * parseInt(this.prize_up) + parseInt(this.min_prize);//最终的百分比
+				console.log(this.min_prize,this.upgrade_people_nums,3898)
+				console.log(percentage,8676)
+				if( percentage > this.max_prize)
+				{
+					console.log(this.max_prize,8888)
+					return parseFloat(this.max_prize);
+				}else{
+					console.log(percentage,9999)
+					return parseFloat(percentage);
+				}
+			}
+			else{
+				return '?';
+			}
+		}
+	},
+	components: {
+		uniCountdowns,
+		uniPopup,
+		returnButton,
+		NowList
+	},
+	// #ifdef MP
+	onShareAppMessage: function(res) {
+		if (res.from === 'button') {
+			// 来自页面内分享按钮
+			let pages = getCurrentPages();
+			// 获取当前页面
+			let page = pages[pages.length - 1];
+			let path = '/' + page.route + '?';
+			// 保存传值
+			for (let i in page.options) {
+				if(i !='spread' ) { 
+					path += i + '=' + page.options[i] + '&';
+				}
+			}
+			// 保存邀请人
+			path += 'spread=' + this.userInfo.uid;
+			console.log(path,9685)
+			let data = {};
+			if( this.types == 1) {
+				// AA团
+				data = {
+					path: path,
+					imageUrl: this.goods.image,
+					// title: '已有' + (parseInt(this.people.length) + 1) + '人拼团成功,快上车'
+					title: '本群已有' + (parseInt(this.people.length) + 1 ) + '人下单,快上车' 
+				}
+			} else {
+				// 达人团
+				data = {
+					path: path,
+					imageUrl: this.goods.image,
+					title: '本群已有' + (parseInt(this.people.length)) + '人下单,快上车' 
+				}
+			}
+			return data;
+		} else {
+			// 来自页面内分享按钮
+			let pages = getCurrentPages();
+			// 获取当前页面
+			let page = pages[pages.length - 1];
+			let path = '/' + page.route + '?';
+			// 保存传值
+			for (let i in page.options) {
+				if(i !='spread' ) { 
+					path += i + '=' + page.options[i] + '&';
+				}
+			}
+			// 保存邀请人
+			path += 'spread=' + this.userInfo.uid;
+			console.log(path,9685)
+			let data = {};
+			if( this.types == 1) {
+				// AA团
+				data = {
+					path: path,
+					imageUrl: this.goods.image,
+					// title: '已有' + (parseInt(this.people.length) + 1) + '人拼团成功,快上车'
+					title: '本群已有' + (parseInt(this.people.length) + 1 ) + '下单,快上车' 
+				}
+			} else {
+				// 达人团
+				data = {
+					path: path,
+					imageUrl: this.goods.image,
+					title: '本群已有' + (parseInt(this.people.length)) + '下单,快上车' 
+				}
+			}
+			return data;
+		}
+	},
+	// #endif
+	data() {
+		return {
+			i:0,
+			min_prize:0,//最低提成百分比
+			max_prize:0,//最高提成百分比
+			upgrade_people_nums:'',//升级人数
+			prize_up: '',	// 提升百分比
+			orderId:'',//订单号
+			order_count:'',//已拼数量
+			types:'',//1AA团 2 达人团
+			state:0,//1正在拼团  2 拼团成功  3 拼团失败
+			user_info: {}, //当前用户信息
+			shopinfo:{},//订单信息
+			goodsinfo:{},//商品信息
+			image:'',//订单商品图片
+			cart_info:{},
+			posturl: '',
+			list: '', //拼团全部信息
+			gp_id: 0, //拼团商品id
+			goods: {}, //商品信息
+			pinkT: {}, //拼团团长信息
+			people: [], //拼团成员信息
+			status: 0, //判断是否为团长
+			notPink: false, //是否已经参团
+			gid: 0,
+			// 倒计时
+			stopTime: {
+				stopTimeD: 0,
+				stopTimeH: 0,
+				stopTimeM: 0,
+				stopTimeS: 0
+			},
+			pinkTInfo: '', //当前用户信息
+			userBool: 0, //判断用户是否已经参与拼团 0未参加 1为已参加
+			spread: '', //默认没有邀请人
+			option: '', //option参数
+			showtime: true, //倒计时天数
+			maskshow: false, //弹窗
+			teamid: '' ,//团长id
+			erros:'',//保存商品错误信息
+			unique:'',//保存传入的规格用于确认购买规格号
+			recommendedlist:[],
+			pinkUser: ''	,// 是否为团长
+			orderShow: false,
+			PinkTList: '',	// 团长其他团
+			pink: 0,	// 是否为拼团
+			tongzhi: 0,	// 是否显示通知
+		}
+	},
+	onLoad(option) {
+		console.log(option)
+		if (option.scene) {
+			if (typeof option.scene == 'string') {
+				let scene = ('{'+option.scene+"}").replace('qr%26','').replace(/%3D/g,':').replace(/%26/g,',').replace('id','\"id\"').replace('spread','\"spread\"');
+				// let scene = ('{'+option.scene+"}")
+				let opt = JSON.parse(scene);
+				// 保存拼团订单id
+				console.log('haha1')
+				this.gp_id = opt.id;
+				
+				
+				if(opt.order_id) {
+					this.orderId = opt.order_id;
+					this.orderShow = true
+				}
+				if (opt.spread) {
+					// 存储邀请人
+					this.spread = opt.spread;
+					uni.setStorageSync('spread', opt.spread);
+				}
+			}
+		} else {
+			// 保存拼团订单id
+			console.log('haha2')
+			this.gp_id = option.id;
+			if(option.order_id) {
+				this.orderId = option.order_id;
+				this.orderShow = true
+			}
+			if(option.pink) {
+				this.pink = option.pink
+			}
+			if(option.tongzhi) {
+				this.tongzhi = option.tongzhi
+			}
+			this.pinkUser = option.pinkUser;
+			if (option.spread) {
+				// 存储邀请人
+				this.spread = option.spread;
+				uni.setStorageSync('spread', option.spread);
+			}
+		}
+		// 判断是否有拼团
+		if(option.unique){
+			this.unique = option.unique
+		}
+		 
+		this.getData();
+		// this.tuanzhang();
+	},
+	onShow() {
+		if( this.orderShow == true ) {
+			uni.showLoading({
+				title: '加载中',
+				mask:true,
+			});
+			orderMake({},this.orderId).then(({data})=>{
+				uni.hideLoading();
+				this.shopinfo = data;
+				this.goodsinfo = data.info[0].cart_info.productInfo;
+				this.cart_info = data.info[0].cart_info;
+				this.image = this.goodsinfo.image;
+				console.log(this.cart_info);
+			}).catch(e => {
+					console.log(e);
+					uni.hideLoading();
+				});
+		}
+		
+	},
+	onPullDownRefresh() {
+		let obj = this;
+		//监听下拉刷新动作的执行方法,每次手动下拉刷新都会执行一次
+		setTimeout(function() {
+			obj.getData();
+			uni.stopPullDownRefresh(); //停止下拉刷新动画
+		}, 1000);
+	},
+	onReady() {
+		let obj = this;
+		console.log(obj.pink)
+			obj.popimg();
+	},
+	methods: {
+		popimg() {
+			console.log(111)
+			if( this.pink == 1 && this.tongzhi == 1 ) {
+				console.log(this.pink,777)
+				this.$refs.popup.open()
+			}
+		},
+		// 消息通知
+		xiaoxi() {
+			this.$refs.popup.close()
+			wx.requestSubscribeMessage({
+				tmplIds: ['upq4J5ZQqRx-se7KgRdWS5d-l7EXKdAKT8W_J6HF70g','XKBGRmGwCzpT6oZZ0m6CF8nOS-eyGoDAI2KMSO4R4JY', '93fUZzhSsYNpBcDgFSgTDk3raKodD-bedAvfl3V4Iho'],
+				  success (res) { 
+						uni.showToast({
+							title:'开启通知成功'
+						})
+					}
+			})
+		},
+		
+		// 保存图片
+		savePost: function(e) {
+			let _self = this;
+			//获取相册授权
+			uni.getSetting({
+				success(res) {
+					if (!res.authSetting['scope.writePhotosAlbum']) {
+						uni.authorize({
+							scope: 'scope.writePhotosAlbum',
+							success() {
+								//这里是用户同意授权后的回调
+								_self.saveImgToLocal();
+							},
+							fail() { //这里是用户拒绝授权后的回调
+								_self.openSettingBtnHidden = false
+							}
+						})
+					} else { //用户已经授权过了
+						_self.saveImgToLocal();
+					}
+				}
+			})
+		},
+		saveImgToLocal: function(e) {
+			let _self = this;
+			uni.showModal({
+				title: '提示',
+				content: '确定保存到相册吗',
+				success: function(res) {
+					if (res.confirm) {
+						uni.downloadFile({
+							url: _self.posturl, //图片地址
+							success: (res) => {
+								if (res.statusCode === 200) {
+									uni.saveImageToPhotosAlbum({
+										filePath: res.tempFilePath,
+										success: function() {
+											uni.showToast({
+												title: "保存成功",
+												icon: "none"
+											});
+											_self.maskshow = false;	// 关闭海报弹窗
+										},
+										fail: function() {
+											uni.showToast({
+												title: "保存失败",
+												icon: "none"
+											});
+										}
+									});
+								}
+							}
+						})
+					} else if (res.cancel) {
+					}
+				}
+			});
+		},
+		
+		// 下载图片方法
+		saveImg(w) {
+			console.log(w);
+			let obj = this;
+			uni.downloadFile({
+				//下载图片
+				url: obj.posturl,
+				success: res => {
+					console.log(res.tempFilePath);
+					uni.saveImageToPhotosAlbum({
+						//将图片保存在手机
+						filePath: res.tempFilePath, //保存的位置
+						success: res => {
+							uni.showToast({
+								title: '保存成功',
+								icon: 'none'
+							});
+						}
+					});
+				}
+			});
+		},
+		openSp() {
+			let obj = this;
+			uni.scanCode({
+				complete(e) {
+					uni.showModal({
+						title: '',
+						content: JSON.stringify(e),
+						showCancel: false,
+						complete() {
+							if(obj.erros){
+							uni.showModal({
+								title: '错误',
+								content:JSON.stringify(obj.erros),
+								showCancel: false
+							});
+							}
+						}
+					});
+				}
+			});
+		},
+		// #ifdef H5
+		// 加载微信html5页面分享方法
+		shareDate() {
+			let obj = this;
+			let url = window.location.href.replace(/[\?,&]{0,1}from=singlemessage/g, '') + '&spread=' + this.userInfo.uid;
+			let bool = uni.getStorageSync('weichatBrowser') || '';
+			if (bool) {
+				// 过滤微信强制添加的链接地址
+				let data = {
+					link: url, // 分享链接
+					imgUrl: obj.goods.image, // 分享图标
+					desc: obj.goods.title,
+					title: obj.goods.title,
+					success: function(e) {}
+				};
+				// 判断是否为微信浏览器
+				if (uni.getStorageSync('weichatBrowser')) {
+					// 加载微信注册信息
+					weixindata(data);
+				}
+			}
+		},
+		// #endif
+		
+		// 详细规则
+		goRule() {
+			// AA团
+			if( this.types == 1 ) {
+				uni.navigateTo({
+					url: '/pages/rule/AArule'
+				})
+			}
+			// 达人团
+ 			if( this.types == 2) {
+				uni.navigateTo({
+					url: '/pages/rule/DaRrule'
+				})
+			}
+			
+		},
+		
+		// 跳转
+		navTo(url) {
+			uni.navigateTo({
+				url: url
+			})
+		},
+		
+		//前往参团
+		goBuy() {
+			let _self = this;
+			
+			uni.navigateTo({
+				url:
+					'/pages/order/createOrderPink?pinkid=' +
+					_self.gp_id +
+					'&type=pink' +
+					'&pid=' +
+					_self.goods.product_id +
+					'&gid=' +
+					_self.goods.id +
+					'&teamid=' +
+					_self.teamid +
+					'&unique=' +
+					(_self.unique||_self.goods.unique) + 
+					'&num=' + 
+					_self.goods.num +
+					'&goodsType=' + '2'
+			});
+		},
+		//拼团商品详情
+		ToDetails(item) {
+			let id = item.id;
+			uni.navigateTo({
+				url: '/pages/product/product?id=' + id + '&type=2'
+			});
+		},
+		
+		// 查看订单及团长信息
+		GoDingdan() {
+			uni.navigateTo({
+				url: '/pages/product/picked?id=' + this.orderId
+			})
+		},
+		
+		//邀请参团
+		open() {
+			let obj = this;
+			let id = obj.goods.id;
+			let type = 2;
+			// 判断拼团是否已经结束
+			if (obj.userBool == 0) {
+				// uni.showModal({
+				// 	title: '提示',
+				// 	content: '该拼团已经结束!',
+				// 	showCancel: false,
+				// 	success: res => {},
+				// 	fail: () => {},
+				// 	complete: () => {}
+				// });
+				uni.showModal({
+					title: '提示',
+					content: '该拼团已结束是否马上开启新的拼团?',
+					showCancel: false,
+					success: res => {
+						uni.navigateTo({
+							url: '/pages/product/productGroup?id=' + id 
+						})
+					},
+					fail: () => {},
+					complete: () => {}
+				});
+				return;
+			}
+			if (!this.posturl) {
+				this.onTap();
+			}
+			this.maskshow = true;
+			this.$refs.share.close()
+		},
+		
+		//随意点击隐藏弹窗
+		onTap() {
+			uni.showLoading({
+				title: '加载中',
+				mask:true,
+			});
+			getCombinationPoster({
+				id: this.gp_id,
+				// #ifdef H5 || APP-PLUS
+				qurl: this.baseURL + this.urlFile + '/pages/groupBooking/groupdetails?pink_id=' + this.gp_id + '&spread=' + uni.getStorageSync('userInfo').uid,
+				from: 'wechat',
+				// #endif
+				// #ifdef MP
+				qurl: 'pages/groupBooking/groupdetails',
+				pink_id: this.gp_id,
+				spread: uni.getStorageSync('userInfo').uid,
+				from: 'routine'
+				// #endif
+			})
+				.then(e => {
+					uni.hideLoading();
+					this.posturl = e.data.url;
+					console.log(e);
+				})
+				.catch(e => {
+					console.log(e);
+					uni.hideLoading();
+				});
+			if (!this.open) return;
+			this.close();
+		},
+		
+		close() {
+			this.maskshow = false;
+		},
+		// 团长确认
+		// tuanzhang() {
+		// 	let obj  = this;
+		// 	if (this.pinkUser == 1) {
+		// 		this.$nextTick(function(){
+		// 			obj.$refs.popPhone.open();
+		// 		})
+		// 	}
+		// },
+		queren() {
+			this.$refs.popPhone.close();
+		},
+		// 获取拼团信息
+		getData() {
+			let obj  = this;
+			uni.showLoading({
+				title: '加载中',
+				mask: true
+			});
+			getCombinationLisPink({}, this.gp_id).then(e => {
+				console.log(e,999)
+				this.$nextTick(function(){
+					uni.hideLoading()
+				})
+				let r = e.data;
+				// 保存拼团商品详细
+				obj.goods = r.store_combination;
+				obj.max_prize = obj.goods.max_prize;
+				obj.min_prize = obj.goods.min_prize;
+				obj.upgrade_people_nums = obj.goods.upgrade_people_nums;
+				obj.prize_up = obj.goods.prize_up;
+				console.log(obj.prize_up,466)
+				//判断是AA团还是达人团
+				if(r.pink_type == "AA团")
+				{
+					obj.types = 1;
+				}else{
+					obj.types = 2;
+				}
+				
+				// 判断当前用户是否为团长
+				obj.teamid = r.pinkT.uid;
+				
+				// AA团
+				if(obj.types == 1) {
+					console.log('chen');
+					nowPinkLst({}).then(({data}) => {
+						obj.recommendedlist = data;
+					})
+				}
+				// 达人团
+				if(obj.types == 2) {
+					console.log('qweqwrq');
+					pinkTAllList({}, obj.teamid).then(({data}) => {
+						obj.PinkTList = data;
+					})
+				}
+				
+				obj.userBool = r.userBool;
+				// 保存团长信息
+				obj.pinkT = r.pinkT;
+				obj.gp_id = r.pinkT.id;
+				/* 计算倒计时 */
+				obj.timeComputed(obj.pinkT.stop_time * 1000);
+				// 获取拼团用户列表
+				obj.people = r.pinkAll;
+				obj.state = r.status;
+				obj.order_count = r.sales;
+				
+				let userPinkBool = false; //判断是否已经参团
+				//当参团列表的uid和userInfo uid相同时,不显示立即加入按钮
+				
+				/* for (let i = 0; i < r.pinkAll.length; i++) {
+					if (r.pinkAll[i].uid == obj.userInfo.uid) {
+						//已经参团
+						userPinkBool = true;
+					}
+				} */
+				/* if (r.pinkT.uid == obj.userInfo.uid) {
+					// 表示为团长已参团
+					userPinkBool = true;
+				} */
+				
+				// 判断是否已经参团过
+				if (!userPinkBool) {
+					obj.notPink = true;
+				}
+				
+				// 获取当前是否已参与过这个拼团
+				let number = obj.pinkT.people - 1;
+				
+				if (r.pinkT.uid == r.userInfo.uid) {
+					// 显示邀请好用选项
+					obj.status = 1;
+				}
+		
+				// 保存当前登录用户信息
+				obj.pinkTInfom = r.userInfo;
+				saveUrl();
+				
+				// #ifdef H5
+				// 加载微信分享配置
+				this.shareDate();
+				// #endif
+			}).catch((e) => {
+				obj.erros = e
+				uni.hideLoading()
+			});
+			
+		},
+		
+		// 计算倒计时时间
+		timeComputed(da) {
+			let obj = this;
+			let stopTime = timeComputed(da);
+			obj.stopTime.stopTimeD = stopTime.day;
+			obj.stopTime.stopTimeH = stopTime.hours;
+			obj.stopTime.stopTimeM = stopTime.minutes;
+			obj.stopTime.stopTimeS = stopTime.seconds;
+			if (stopTime.day < 1) {
+				obj.showtime = false;
+			}
+		},
+		
+		//跳转拼团商品详情页
+		ToGroup(item) {
+			let id = item.id;
+			uni.navigateTo({
+				url: '/pages/product/productGroup?id=' + id + '&show=true'
+			});
+		},
+		
+		// 去开团
+		ToKaiTuan(item) {
+			console.log(8754847)
+			let id = item.id;
+			uni.navigateTo({
+				url: '/pages/product/productGroup?id=' + id
+			});
+		},
+		
+		// 去参团
+		ToCanTuan(item) {
+			let id = item.pink_id;
+			uni.navigateTo({
+				url: '/pages/groupBooking/groupdetails?id=' + id
+			});
+		},
+		
+		openshare(){
+			this.$refs.share.open()
+		},
+		closeshare() {
+			this.$refs.share.close()
+		},
+		// open(){
+		// 	this.$refs.popup2.open()
+		// },
+		launch(){
+			uni.showModal({
+				content: '您是否是团长,需要发起无购买拼团?',
+				success: function (res) {
+					if (res.confirm) {
+						console.log('用户点击确定');
+					} else if (res.cancel) {
+						console.log('用户点击取消');
+					}
+				}
+			});
+		}
+	}
+}
+	
+</script>
+
+<style lang="scss">
+	.share-box{
+		width: 710rpx;
+		padding: 42rpx 85rpx;
+		border-radius:15rpx;
+		background-color: #FFFFFF;
+		text-align: center;
+		.share-tit{
+			font-size:28rpx;
+			font-weight:bold;
+			color:rgba(0,0,0,1);
+			line-height:34rpx;
+			margin-bottom: 30rpx;
+		}
+		.share-tit2{
+			font-size:22rpx;
+			font-weight:bold;
+			color:rgba(107,105,108,1);
+			line-height:30rpx;
+			margin-bottom: 30rpx;
+		}
+		.share-footbox{
+			display: flex;
+			.button-share {
+				background: 0;
+				flex-direction: column;
+				display: flex;
+				align-items: center;
+				
+				&::after {
+					border: 0;
+				}
+			}
+			.share-icon{
+				flex: 1;
+				height: 180rpx;
+				.lyy-b-but {
+					width: 550rpx;
+					height: 80rpx;
+					margin: 0 5rpx;
+					background: #fc5b62;
+					border-radius: 100rpx;
+					text-align: center;
+					color: white;
+					line-height: 80rpx;
+					font-size: 32rpx;
+				}
+				.icon{
+					width: 120rpx;
+					height: 120rpx;
+					margin-bottom: 20rpx;
+				}
+				.share-txt{
+					font-size:27rpx;
+					font-weight:bold;
+					color:rgba(9,10,13,1);
+				}
+			}
+		}
+		
+	}
+	
+	.pinkTuan {
+		position: relative;
+		.pinktuan-sym {
+			border-radius: 0;
+		}
+	}
+	
+page,.container{
+	line-height: 1;
+	height: 100%;
+	.reds{
+		position: relative;
+		top: 0;
+		z-index: 0;
+		width:100%;
+		height:520rpx;
+		// background:linear-gradient(14deg,#ff7425,#ff1e29);
+		background: linear-gradient(14deg, rgba(181,116,242, 1) 0%, rgba(139,86,254, 1) 100%);
+	}
+	.conter{
+		position: absolute;
+		top: 0;
+		padding:0  20rpx;
+		width: 100%;
+		padding-bottom: 100rpx;
+	}
+	.tips{
+		margin: 15rpx 0rpx;
+		padding: 5rpx 10rpx;
+		border-radius: 25rpx 0 0 25rpx;
+		width:300rpx;
+		height:50rpx;
+		background:#ed372c;
+		image{
+			width: 45rpx;
+			height: 45rpx;
+			margin-right: 50rpx;
+		}
+		text{
+			font-size:23rpx;
+			font-weight:400;
+			color:#ffffff;
+		}
+	}
+	.details {
+		margin-top: 20rpx;
+		padding: 25rpx 35rpx;
+		width: 100%;
+		background:#ffffff;
+		border-radius:20rpx;
+		.m-t10{
+			margin-top: 10rpx;
+		}
+		.m-t5{
+			margin-top: 5rpx;
+		}
+		.left-img {
+			position: relative;
+			image {
+				width: 170rpx;
+				height: 170rpx;
+				border-radius: 10rpx;
+				margin-right: 25rpx;
+			}
+			.left-img1{
+				width: 83rpx;
+				height: 34rpx;
+				position: absolute;
+				top:0;
+				left:0;
+			}
+	}
+		.right-word {
+			width: 100%;
+			.one {
+				font-size:30rpx;
+				color:#000000;
+				overflow : hidden;
+				text-overflow: ellipsis;
+				display: -webkit-box;
+				-webkit-line-clamp: 2;
+				-webkit-box-orient: vertical;
+				line-height: 1.2;
+				width: 420rpx;
+				// margin-left: 8rpx;
+			}
+			.two{
+				font-size:25rpx;
+				color:#8e8e8e;
+				// margin-left: 8rpx;
+				display: flex;
+				.two-1{
+					padding-right: 15rpx;
+					border-right: 1px solid #8e8e8e;
+				}
+				.two-2{
+					padding-left: 15rpx;
+				}
+			}
+			.word-3{
+				margin-top: 10rpx;
+				position: relative;
+				font-size:20rpx;
+				color:#ffffff;
+				display: flex;
+				align-items: center;
+				// image{
+				// 	width: 208rpx;
+				// 	height: 45rpx;
+				// }
+				.wenhao {
+					width: 32rpx;
+					height: 32rpx;
+					margin-left: 16rpx;
+				}
+				.word-3-1{
+					// position: absolute;
+					// top:7px;
+					// left:5px;
+					width: 200rpx;
+					border: 1px solid #F9DCDD;
+					.word-text {
+						width: 65%;
+						display: inline-block;
+						background: linear-gradient(0deg,#ff7425,#ff1e29);
+						padding: 4rpx 4rpx;
+						text-align: center;
+					}
+					.word-3-1-1{
+						width: 35%;
+						background: #FFF5F4;
+						color:#FD1B2A;
+						display: inline-block;
+						text-align: center;
+						padding: 4rpx 0;
+						// margin-left: 15rpx;
+					}
+					
+				}
+			}
+			.three{
+				font-size:25rpx;
+				font-weight:400;
+				color:#ff0919;
+				// margin-left: 8rpx;
+			}
+			.six{
+				margin-top: 10rpx;
+				position: relative;
+				font-size:22rpx;
+				color:#ffffff;
+				display: flex;
+				align-items: flex-end;
+				// image{
+				// 	width: 270rpx;
+				// 	height: 80rpx;
+				// }
+				.wenhao-six {
+					width: 32rpx;
+					height: 32rpx;
+					margin-left: 16rpx;
+				}
+				.six-1{
+					// position: absolute;
+					// top:6px;
+					// left:7px;
+					width: 240rpx;
+					border: 1px solid #F9DCDD;
+					.six-text {
+						width: 60%;
+						display: inline-block;
+						background: linear-gradient(0deg,#ff7425,#ff1e29);
+						padding: 4rpx 4rpx;
+						text-align: center;
+					}
+					.six-red{
+						width: 40%;
+						background: #FFF5F4;
+						color:#FD1B2A;
+						display: inline-block;
+						text-align: center;
+						padding: 4rpx 0;
+						// margin-left: 15rpx;
+					}
+				}
+				.six-2{
+					// position: absolute;
+					// top:24px;
+					// left:7px;
+					width: 240rpx;
+					// color:#FF2829;
+					// background: #FFF5F4;
+					border: 1px solid #F9DCDD;
+					.six-text2 {
+						display: inline-block;
+						width: 60%;
+						padding: 4rpx 4rpx;
+						background: linear-gradient(0deg,#ff7425,#ff1e29);
+						text-align: center;
+					}
+					.six-red{
+						display: inline-block;
+						background: #FFF5F4;
+						color:#FD1B2A;
+						width: 40%;
+						text-align: center;
+						padding: 4rpx 0;
+						// margin-left: 10rpx;
+					}
+				}
+			}
+			.four{
+				font-size:25rpx;
+				font-weight:500;
+				color:#ff0919;
+				// margin-left: 8rpx;
+				.four-1{
+					font-size:45rpx;
+				}
+			}
+			.five{
+				font-size:25rpx;
+				font-weight:normal;
+				color:#8b8e95;
+				// margin-left: 8rpx;
+			}
+		}
+	}
+	.participate{
+		margin-top: 25rpx;
+		padding: 25rpx 25rpx;
+		width: 100%;
+		background:#ffffff;
+		border-radius:20rpx;
+		text-align: center;
+		.participate-one{
+			font-size: 43rpx;
+		}
+		.rows-1{
+			.participate-1{
+				font-size:29rpx;
+				color:#000000;
+				text-align: center;
+				text{
+					color: #F81726;
+				}
+			}
+			.participate-2{
+				font-size:29rpx;
+				color:rgba(145,148,155,1);
+				line-height:44rpx;
+				margin-top: 20rpx;
+				//text-align: center;
+				.participate-red{
+					color:#FF0A1A;
+				}
+			}
+			.participate-3{
+				font-size:22rpx;
+				font-weight:bold;
+				color:#99999a;
+				line-height:33rpx;
+				margin-top: 10rpx;
+			}
+			.pinkT-Box {
+				white-space: nowrap;
+				margin: 30rpx 0;
+			}
+			.PinkCenter {
+				justify-content: center;
+				margin: 30rpx 0;
+			}
+			.participate-4{
+				display: flex;
+				&:nth-last-child(1){
+					margin-right: 0rpx;
+				}
+				.participate-4-1{
+					position: relative;
+					margin-left: 30rpx;
+					image{
+						width: 100rpx;
+						height: 100rpx;
+						border-radius: 50%;
+						// margin-right: 30rpx;
+					}
+					.participate-4-1-1{
+						width: 60rpx;
+						height: 30rpx;
+						border-radius: 0;
+						position: absolute;
+						bottom: 0;
+						left: 20rpx;
+					}
+				}
+			}
+		}
+		.rows-2{
+			width: 540rpx;
+			height: 270rpx;
+			margin: 0 auto;
+			margin-bottom: 50rpx;
+			background: url(https://shicai.liuniu946.com/img/img82.png) no-repeat center;
+			background-size: 410rpx 270rpx;
+			padding-top: 50rpx;
+			.rows-2-1{
+				font-size:42rpx;
+				font-weight:bold;
+				color:#000000;
+				line-height:63rpx;
+			}
+			.rows-2-2{
+				margin-top: 20rpx;
+				font-size:25rpx;
+				font-weight:400;
+				color:#000000;
+				line-height:37rpx;
+			}
+			.rows-2-3{
+				width: 100%;
+				margin: 0 auto;
+				margin-top: 20rpx;
+				display: flex;
+				justify-content: space-around;
+				align-items: center;
+				image{
+					width: 85rpx;
+					height: 85rpx;
+					border-radius: 50%;
+					margin-right: 20rpx;
+				}
+				.rows-2-3-2{
+					image{
+						width: 50rpx;
+						height: 50rpx;
+						border-radius: 50%;
+					}
+				}
+			}
+		}
+		.PinkT-success {
+			display: flex;
+			align-items: center;
+			justify-content: center;
+		}
+		.participate-5{
+			margin: 0 auto;
+			height:80rpx;
+			// background:linear-gradient(-14deg,#fe6b26,#ff3228);
+			background: linear-gradient(-14deg, rgba(181,116,242, 1) 0%, rgba(139,86,254, 1) 100%);
+			border-radius:40rpx;
+			font-size:30rpx;
+			color:#ffffff;
+			line-height:80rpx;
+		}
+		.participate-6{
+			height:1px;
+			background:#e9e9e9;
+			margin-top: 50rpx;
+		}
+		.participate-7{
+			color: #000000;
+			font-size:29rpx;
+			font-weight:500;
+			margin: 45rpx 0;
+			.participate-7-1{
+				.word{
+					color:#ff0a1a;
+				}
+				.word1{
+					font-size:25rpx;
+					color:#989aa0;
+				}
+				image{
+					width: 10rpx;
+					height: 20rpx;
+					margin-left: 15rpx;
+				}
+			}
+		}
+		.participate-8{
+			image{
+				width: 26rpx;
+				height: 12rpx;
+			}
+			.participate-8-1{
+				
+				.img1{
+					width: 43rpx;
+					height: 50rpx;
+				}
+				.img2{
+					width: 43rpx;
+					height: 42rpx;
+				}
+				.img3{
+					width: 60rpx;
+					height: 46rpx;
+				}
+				.word-1{
+					font-size:23rpx;
+					color:#000000;
+					line-height:34rpx;
+				}
+				.word-2{
+					font-size:21rpx;
+					color:#91949B;
+					line-height:34rpx;
+				}
+			}
+		}
+	}
+	.info {
+		width: 714rpx;
+		margin: 15rpx auto 0;
+		background: rgba(255, 255, 255, 1);
+		border-radius: 10rpx;
+		padding: 30rpx;
+	
+		.info-top {
+			display: flex;
+			justify-content: space-between;
+			.top-left {
+				display: flex;
+				.left-img {
+					width: 137rpx;
+					height: 137rpx;
+					border-radius: 5rpx;
+					margin-right: 10rpx;
+				}
+				.left-box {
+					.left-tit {
+						font-size: 27rpx;
+						font-weight: 400;
+						color: rgba(0, 0, 0, 1);
+						margin-bottom: 5rpx;
+					}
+					.left {
+						font-size: 23rpx;
+						font-weight: 400;
+						color: rgba(149, 149, 149, 1);
+						line-height: 35rpx;
+					}
+				}
+			}
+			.top-right {
+				font-size: 27rpx;
+				font-weight: 400;
+				color: rgba(0, 0, 0, 1);
+			}
+		}
+		.info-pic {
+			display: flex;
+			justify-content: space-between;
+			.pic-left {
+				margin-top: 30rpx;
+				font-size: 27rpx;
+				font-weight: 400;
+				color: rgba(74, 74, 74, 1);
+				width: 30%;
+			}
+			.pic-right {
+				width: 70%;
+				margin-top: 30rpx;
+				font-size: 27rpx;
+				font-weight: 400;
+				color: rgba(0, 0, 0, 1);
+				text-align: right;
+				&.red {
+					color: #FF0A31;
+				}
+			}
+		}
+	}
+	.PinkT-title {
+		padding-top: 30rpx;
+		font-size: 28rpx;
+		font-weight: bold;
+	}
+	.PinkT-info {
+		display: flex;
+		align-items: center;
+		margin-top: 20rpx;
+		.info-img {
+			width: 80rpx;
+			height: 80rpx;
+			border-radius: 50%;
+			position: relative;
+			image {
+				width: 100%;
+				height: 100%;
+				border-radius: 50%;
+			}
+			.PinkT-tuanzhang {
+				width: 60rpx;
+				height: 30rpx;
+				border-radius: 0;
+				position: absolute;
+				bottom: -10rpx;
+				left: 8rpx;
+			}
+		}
+		.PinkT-right {
+			width: 80%;
+			margin-left: 16rpx;
+			.PinkT-right-box {
+			}
+			.PinkT-last {
+				display: flex;
+				margin-top: 10rpx;
+			}
+			.PinkT-text {
+				font-size: 27rpx;
+				font-weight: 400;
+				color: #000000;
+			}
+		}
+	}
+	
+	.infos {
+		width: 714rpx;
+		margin: 15rpx auto 0;
+		background: rgba(255, 255, 255, 1);
+		border-radius: 10rpx;
+		padding: 0 30rpx 30rpx 30rpx;
+		
+		.info-top {
+			display: flex;
+			justify-content: space-between;
+			.top-left {
+				display: flex;
+				.left-img {
+					width: 137rpx;
+					height: 137rpx;
+					border-radius: 5rpx;
+					margin-right: 10rpx;
+				}
+				.left-box {
+					.left-tit {
+						font-size: 27rpx;
+						font-weight: 400;
+						color: #000000;
+						margin-bottom: 5rpx;
+					}
+					.left {
+						font-size: 23rpx;
+						font-weight: 400;
+						color: rgba(149, 149, 149, 1);
+						line-height: 35rpx;
+					}
+				}
+			}
+			.top-right {
+				font-size: 27rpx;
+				font-weight: 400;
+				color: #000000;
+			}
+		}
+		.info-pic {
+			display: flex;
+			justify-content: space-between;
+			.pic-left {
+				margin-top: 30rpx;
+				font-size: 27rpx;
+				font-weight: 400;
+				color: #000000;
+			}
+			.pic-right {
+				margin-top: 30rpx;
+				font-size: 27rpx;
+				font-weight: 400;
+				color: #000000;
+				&.red {
+					color: #000000;
+				}
+			}
+		}
+	}
+	.other{
+		.other-1{
+			font-size:27rpx;
+			color:#333333;
+			line-height: 55rpx;
+		}
+		
+		.preferred_item {
+			width: 100%;
+			height: 100%;
+			padding: 25rpx 25rpx;
+			position: relative;
+			background-color: #FFFFFF;
+			border-radius: 15rpx;
+			margin-bottom: 15rpx;
+			.tlist-img {
+				width: 225rpx;
+				position: relative;
+				margin-right: 15rpx;
+				.leftImgIcon {
+					position: absolute;
+					top: 0;
+					left: 0;
+					font-size: 22rpx;
+					font-family: PingFangSC;
+					color: rgba(148, 71, 34, 1);
+					background: rgba(254, 242, 111, 1);
+					z-index: 99;
+					border-radius: 5rpx;
+					padding: 5rpx 10rpx;
+				}
+				.img {
+					width: 210rpx;
+					height: 210rpx;
+					image {
+						width: 100%;
+						height: 100%;
+						border-radius: 20rpx;
+					}
+				}
+				.stock {
+					margin-top: 13rpx;
+					font-size: 26rpx;
+					background: #fff1ee;
+					width: 100%;
+					color: #fb4912;
+					padding: 6rpx 0;
+					border-radius: 5rpx;
+					justify-content: center;
+					align-items: center;
+					position: absolute;
+					left: 0;
+					bottom: 0;
+					.img {
+						width: 20rpx;
+						height: 20rpx;
+						flex-shrink: 0;
+					}
+					.stock-num {
+						padding-left: 7rpx;
+						font-size: 22rpx;
+						border-radius: 5rpx;
+						height: 32rpx;
+						line-height: 32rpx;
+					}
+				}
+			}
+			.goods_name {
+				.goods_title {
+					padding-top: 15rpx;
+					color:rgba(0,0,0,1);
+					// white-space: nowrap;
+					// overflow: hidden;
+					// text-overflow: ellipsis;
+					font-size:32rpx;
+					color: $font-color-dark;
+					// height: 70rpx;
+					align-items: baseline;
+					.text{
+						border-radius: 8rpx;
+						border: 2rpx solid #FF1A27;
+						color: #FF1A27;
+						padding:0rpx 10rpx;
+						font-size: 26rpx !important;
+						margin-right: 15rpx;
+						
+					}
+					.title {
+						width: 80%;
+						overflow : hidden;
+						text-overflow: ellipsis;
+						display: -webkit-box;
+						-webkit-line-clamp: 2;
+						-webkit-box-orient: vertical;
+					}
+				}
+				.goods-height {
+					min-height: 60rpx;
+				}
+				.goods_num {
+					font-size: 26rpx;
+					color: #8f8f97;
+					padding-bottom: 15rpx;
+				}
+				.goods-peplo {
+					height: 45rpx;
+					margin-top: 15rpx;
+					.right {
+						color:#8e8e8e;
+						font-size: 24rpx;
+						width:195rpx;
+						image {
+							width: 30rpx;
+							height: 33rpx;
+							margin-right: 15rpx;
+						}
+					}
+					.goods-tip {
+						.peplo {
+							background:linear-gradient(14deg,rgba(255,116,37,1),rgba(255,30,41,1));
+							padding: 5rpx 10rpx;
+							color: #ffffff;
+							border-top-left-radius:8rpx;
+							border-bottom-left-radius: 8rpx;
+						}
+						.make {
+							background-color: #fef26f;
+							color: #944722;
+							border-top-right-radius: 8rpx;
+							border-bottom-right-radius: 8rpx;
+						}
+						.make,
+						.peplo {
+							font-size: $font-sm;
+							padding: 5rpx 10rpx;
+						}
+					}
+				}
+				.price {
+					font-size: 28rpx;
+					position: relative;
+					padding-top: 15rpx;
+					.price_list {
+						.price-red {
+							font-size: 30rpx !important;
+							font-family: Source Han Sans CN;
+							color: rgba(253, 27, 42, 1);
+							font-size: $font-base;
+							font-weight: bold;
+							.moneyIcon {
+								font-weight: normal !important; 
+							}
+							.money {
+								font-size: 58rpx;
+							}
+							.moneyType {
+								font-weight: 400;
+							}
+							.outMoney {
+								font-weight: 400;
+								text-decoration: line-through;
+								color: rgba(142, 142, 142, 1);
+							}
+						}
+						.price-green {
+							color: #2dbd59;
+							font-size: 26rpx !important;
+							font-weight: bold;
+							text {
+								background: linear-gradient(45deg, rgba(21, 197, 52, 1), rgba(21, 197, 52, 1));
+								color: #ffffff;
+								padding: 0rpx 10rpx;
+								border-radius: 7rpx;
+								font-size: 24rpx !important;
+								margin-left: 15rpx;
+							}
+						}
+					}
+					.img {
+						width: 265rpx;
+						height: 74rpx;
+						line-height: 74rpx;
+						// background:linear-gradient(14deg,rgba(255,116,37,1),rgba(255,30,41,1));
+						background: linear-gradient(270deg, rgba(181,116,242, 1) 0%, rgba(139,86,254, 1) 100%);
+						border-radius: 99rpx;
+						color: #ffffff;
+						font-size: $font-lg;
+						text-align: center;
+					}
+					.img1{
+						background-color: #D3D3D3;
+						width: 265rpx;
+						height: 74rpx;
+						line-height: 74rpx;
+						border-radius: 99rpx;
+						color: #ffffff;
+						font-size: $font-lg;
+						text-align: center;
+					}
+					.tomorrow {
+						background: #29a66e;
+						color: #ffffff;
+						border-radius: 25rpx;
+						padding: 10rpx 25rpx;
+					}
+				}
+			}
+		}
+		
+		
+		.other-2{
+			width: 100%;
+			background:#ffffff;
+			padding: 10rpx 15rpx ;
+			border-radius: 20rpx;
+			.content-row{
+				padding: 10rpx 0;
+				.row-1{
+					width: 210rpx;
+					position: relative;
+					margin-right: 20rpx;
+					text-align: center;
+					.row-1-1{
+						text-align: center;
+						height:40rpx;
+						background:#fff1ee;
+						border-radius:6rpx;
+						font-size:22rpx;
+						font-weight:500;
+						color:#fb4912;
+						line-height:40rpx;
+						image{
+							width: 23rpx;
+							height: 23rpx;
+							margin-right: 5rpx;
+						}
+					}
+					.img1{
+						width:170rpx;
+						height:170rpx;
+						border-radius:10rpx;
+					}
+					.img2{
+						position: absolute;
+						top: 0;
+						left: 16rpx;
+						width:80rpx;
+						height:32rpx;
+						border-radius:5px;
+					}
+				}
+				.row-2{
+					padding: 20rpx 0 20rpx 0;
+					width:calc(100% - 210rpx);
+					position: relative;
+					
+					border-bottom: 1px solid #EAEAEA;
+					.word-1{
+						font-size:32rpx;
+						font-weight:bold;
+						color:#141821;
+						margin-left: 10rpx;
+						overflow: hidden;
+						text-overflow: ellipsis;
+						white-space: nowrap;
+					}
+					.word-2{
+						margin-top: 10rpx;
+						font-size:24rpx;
+						color:#979797;
+					}
+					.word-3{
+						margin-top: 10rpx;
+						position: relative;
+						font-size:20rpx;
+						color:#ffffff;
+						image{
+							width: 235rpx;
+							height: 50rpx;
+						}
+						.word-3-1{
+							position: absolute;
+							top:8px;
+							left:2px;
+							width: 230rpx;
+							text-align: center;
+							.word-3-1-1{
+								display: inline-block;
+								color:#FD1B2A;
+								width: 50%;
+							}
+							
+						}
+					}
+					.word-4{
+						margin-top: 15rpx;
+						font-size:23rpx;
+						color:#fd1b2a;
+						margin-left: 10rpx;
+						text{
+							font-size:23rpx;
+							font-weight:bold;
+						}
+						.word-4-1{
+							font-size:36rpx;
+						}
+					}
+					.word-5{
+						margin-top: 15rpx;
+						font-size:21rpx;
+						color:#868686;
+					}
+					.button{
+						width:145rpx;
+						height:60rpx;
+						background:linear-gradient(14deg,#ff7425,#ff1e29);
+						border-radius:30rpx;
+						font-size:27rpx;
+						font-weight:bold;
+						color:#ffffff;
+						line-height:60rpx;
+						text-align: center;
+						
+						position: absolute;
+						bottom: 20rpx;
+						right: 0;
+					}
+				}
+			}
+		}
+	}
+	.foot{
+		position: fixed;
+		bottom: 0;
+		width:100%;
+		height:80rpx;
+		// background:linear-gradient(90deg,#ff7425,#ff1e29);
+		background: linear-gradient(90deg, rgba(181,116,242, 1) 0%, rgba(139,86,254, 1) 100%);
+		font-size:30rpx;
+		font-weight:bold;
+		color:#ffffff;
+		line-height:80rpx;
+		text-align: center;
+		z-index: 99;
+	}
+	.popup1{
+		width:510rpx;
+		background:rgba(255,255,255,1);
+		border-radius:20rpx;
+		.popup-1{
+			height: 50%;
+			padding: 50rpx;
+			font-size:29rpx;
+			color:rgba(51,51,51,1);
+			line-height:42rpx;
+			border-bottom: 1px solid #EEEEEE;
+		}
+		.popup-2{
+			margin: 0 auto;
+			margin-top: 20rpx;
+			width:217rpx;
+			height:55rpx;
+			background:rgba(2,193,93,1);
+			font-size:35rpx;
+			font-weight:500;
+			color:#ffffff;
+			line-height:55rpx;
+			text-align: center;
+		}
+	}
+	.popup2{
+		width:600rpx;
+		background:rgba(255,255,255,1);
+		border-radius:20rpx;
+		padding-bottom:20rpx;
+		.popup2-1{
+			text-align: center;
+			height: 80%;
+			padding: 50rpx;
+			font-size:43rpx;
+			color:rgba(51,51,51,1);
+			border-bottom: 1px solid #EEEEEE;
+		}
+		.popup2-2{
+			margin: 0 auto;
+			margin-top: 20rpx;
+			width:100%;
+			height:55rpx;
+			font-size:35rpx;
+			font-weight:500;
+			color:#000000;
+			line-height:55rpx;
+			text-align: center;
+			.one{
+				width: 50%;
+				font-size:43rpx;
+				color:#000000;
+				line-height:65rpx;
+				border-right: 1px solid #EEEEEE;
+				&:nth-last-child(1){
+					border-right: 0px;
+				}
+			}
+		}
+	}
+}
+.mask {
+	z-index: 999;
+	width: 750rpx;
+	height: 100%;
+	position: fixed;
+	top: 0;
+	left: 0;
+	text-align: center;
+	background-color: rgba(0, 0, 0, 0.5);
+	.close {
+		width: 40rpx;
+		height: 40rpx;
+		position: absolute;
+		top: 12rpx;
+		z-index: 99;
+		right: 12%;
+	}
+	image {
+		width: 80%;
+		margin-top: 20%;
+		// opacity: 0.8;
+	}
+	.save-btn {
+		background: $base-color;
+		color: #FFFFFF;
+		border-radius: 100rpx;
+		width: 300rpx;
+		margin: auto;
+		padding: 10rpx 0;
+		margin-top: 20rpx;
+		font-size: $font-lg;
+	}
+}
+
+.pop-box {
+	background: #FFFFFF;
+	margin: 0 40rpx;
+	padding: 30rpx 30rpx;
+	border-radius: 20rpx;
+	.pop-tit {
+		font-size: 32rpx;
+		line-height: 1.5;
+	}
+	.pop-buttom {
+		margin: 40rpx 0;
+		background: #f0f0f0;
+		// color: #FFFFFF;
+		padding: 10rpx 20rpx;
+		border-radius: 10rpx;
+		border: 1px solid $border-color-dark;
+		font-size: $font-base;
+	}
+	.pop-qr {
+		background: $base-color;
+		width: 200rpx;
+		margin: auto;
+		padding: 20rpx;
+		color: #FFFFFF;
+		border-radius: 15rpx;
+		text-align: center;
+	}
+}
+
+.pop-box {
+	background: #FFFFFF;
+	width: 600rpx;
+	border-radius: 20rpx;
+	padding: 30rpx 20rpx;
+	.pop-text {
+		text-align: center;
+		font-size: 32rpx;
+	}
+	.pop-button {
+		margin: 0 auto;
+		font-size: 30rpx;
+		margin-top: 30rpx;
+		padding: 10rpx 0;
+		border-radius: 15rpx;
+		text-align: center;
+		width: 200rpx;
+		color: #FFFFFF;
+		background: $base-color;
+	}
+}
+
+</style>

+ 912 - 0
pages/groupBooking/index.vue

@@ -0,0 +1,912 @@
+<template>
+	<view class="container">
+		<view class="top-box">
+			<view class="top-img" @click="ToBofang">
+				<image src="http://shicai.liuniu946.com/static/img/pinkBanner.png"></image>
+				<image class="bofang" src="../../static/img/bo.png"></image>
+			</view>
+			<view class="switch-bar flex_item">
+				<view class="switchList" @click="change(index)" :key="index" v-for="(ls, index) in switchList" v-bind:class="{ active_color: index == checkedTab }">
+					<view class="time">{{ ls.time }}</view>
+					<view class="name" :class="{ drname: index == checkedTab && sid == 131 }">{{ ls.name }}</view>
+					<!-- <view class="switchimg" v-bind:class="{ switchimgshow: index == 1 }"><image src="/static/img/img084.png"></image></view> -->
+				</view>
+			</view>
+			<view class="tip flex">
+				<view class="time-box flex" >
+					<view class="time-name">抢购中先下单先得哦</view>
+					<!-- <view class="flex_item" v-show="starting">
+						<view>距开始</view>
+						<uni-countdown color="#FFFFFF" background-color="#334432" 
+							:show-day="false" 
+							:hour="starthour" 
+							:minute="startminute" 
+							:second="startsecond">
+						</uni-countdown>
+					</view> -->
+					<!-- <view class="flex_item" v-show="Timeing">
+						<view>距结束</view>
+						<uni-countdown color="#FFFFFF" background-color="#334432" 
+							:show-day="false" 
+							:hour="Timeinghour" 
+							:minute="Timeingminute" 
+							:second="Timeingsecond">
+						</uni-countdown>
+					</view> -->
+				</view>
+			</view>
+		</view>
+		<view class="tab-content">
+			<view class="preferred_item" v-for="item in list" @click="navToDetailPage(item)">
+				<view class="flex_item">
+					<view class="tlist-img">
+						<view class="leftImgIcon" v-if="sid == 132">AA团</view>
+						<view class="leftImgIcon" v-if="sid == 131">达人团</view>
+						<view class="img"><image :src="item.image" mode="scaleToFill"></image></view>
+					</view>
+					<view class="tlist-img " v-for="imgItem in item.images">
+						<view class="img"><image :src="imgItem" mode="scaleToFill"></image></view>
+					</view>
+				</view>
+				<view class="goods_name">
+					<view class="AAgoods_title" v-if="sid == 132">
+						<view class="text">{{ item.min_people }}人团</view>
+						<view class="AAtitle">{{ item.title }}</view>
+					</view>
+					<view class="goods_title flex_item" v-if="sid == 131">
+						<view class="text">{{ item.min_people }}人团</view>
+						<view class="">{{ item.title }}</view>
+					</view>
+					<view class="goods-height">
+						<!-- <view class="goods_num clamp">{{ item.info }}</view> -->
+						<view class="flex goods-peplo">
+							<view class="goods-tip flex_item">
+								<view class="peplo">库存剩{{ item.percent | parseIntTo }}%</view>
+								<view class="make">{{ item.mark }}</view>
+							</view>
+							<view class="right flex_item">
+								<image src="/static/icon/hot.png" mode="aspectFill"></image>
+								<text>已拼{{ item.sales }}份</text>
+							</view>
+						</view>
+					</view>
+					<view class="price flex">
+						<view class="price_list">
+							<view class="price-red">
+								<text v-if="sid == 132">拼团价:</text>
+								<text class="moneyIcon">¥</text>
+								<text class="money">{{ item.price }}</text>
+								<!-- <text class="moneyType">/{{ item.unit_name }}</text> -->
+								<text class="outMoney" v-if="sid == 131">¥{{ item.product_price }}</text>
+							</view>
+						</view>
+						<view v-if="sid == 132 && item.stock >0 " class="img position-relative" @click.stop="Addcar(item)">去开团</view>
+						<view v-if="sid == 132 && item.stock <1 " class="img1 position-relative">敬请期待</view>
+						<view v-if="sid == 131 && item.stock <1 " class="img1 position-relative">敬请期待</view>
+					</view>
+				</view>
+			</view>
+		</view>
+		<button v-if="sid == 132" open-type="share" class="shareDate">分享给好友</button>
+		<button v-if="sid == 131" class="shareDate" @click="pinkAuto">一键开团</button>
+		
+		<uni-popup ref="popup" type="center">
+			<view class="pop-box">
+				<view class="pop-text">
+					为了方便您查看您的拼团详细状况,我们需要您的通知授权
+				</view>
+				<view class="pop-button" @click="tongzhi()">
+					开启通知
+				</view>
+			</view>
+		</uni-popup>
+		
+		<!-- 返回按钮 -->
+		<return-button></return-button>
+	</view>
+</template>
+<script>
+import { cartAdd, autoPink } from '@/api/product.js';
+import { getCombinationList } from '@/api/groupBooking.js';
+import { saveUrl, interceptor } from '@/utils/loginUtils.js';
+import { mapState } from 'vuex';
+import { loadIndexs } from '@/api/index.js';
+import uniLoadMore from '@/components/uni-load-more/uni-load-more.vue';
+import empty from '@/components/empty';
+import uniCountdown from '@/components/uni-countdown/uni-countdown.vue';
+import uniPopup from '@/components/uni-popup/uni-popup.vue';
+// 返回按钮
+import returnButton from '@/pages/return/returnButton.vue';
+export default {
+	computed: {
+		...mapState('user', ['userInfo', 'hasLogin']),
+		...mapState(['addressData', 'addressPageShow'])
+	},
+	components: {
+		empty,
+		uniLoadMore,
+		uniCountdown,
+		uniPopup,
+		returnButton
+	},
+	data() {
+		return {
+			scrollHeight: 0, // 底部分享按钮高度
+			checkedTab: 0, // 当前选中的切换页面
+			switchList: [
+				{
+					id: 1,
+					time: 'AA团',
+					name: '邀请好友越多,奖励越多',
+					// sid: 132,
+					// sid: 128,	// 测试服是128
+					// page: 1, //当前页数
+					// limit: 100 //每次信息条数
+				},
+				// {
+				// 	id: 2,
+				// 	time: '带货达人团',
+				// 	name: '团长专用带货团',
+				// 	// sid: 129,	// 测试服是129
+				// 	// sid: 131,
+				// 	// page: 1, //当前页数
+				// 	// limit: 100 //每次信息条数
+				// }
+			],
+			sid:132,
+			list:[],
+			checkid:0,
+			//倒计时
+			hour: 0,//距离明天8点开始时间
+			minute: 0,
+			second: 0,
+			
+			starting: false,//判断活动未开始
+			Timeing:false,//判断活动进行中
+			
+			starthour:0,//距离今天开始时间
+			startminute:0,
+			startsecond:0,
+			
+			Timeinghour:0,//距离今天结束时间
+			Timeingminute:0,
+			Timeingsecond:0,
+			
+			workstarTime:'',
+			workendTime:'',
+		};
+	},
+	filters: {
+		parseIntTo(percent) {
+			percent = +percent * 100;
+			if (percent % 1 === 0) {
+				return percent;
+			} else {
+				percent = percent.toFixed(1);
+				return percent;
+			}
+		}
+	},
+	onLoad(option) {
+		// 判断是否登录
+		if (!this.hasLogin) {
+			interceptor();
+		}
+		// 判断有无邀请人
+		if (option.spread) {
+			uni.setStorageSync('spread', option.spread);
+		}
+		saveUrl();
+	},
+	onShow() {
+		this.Getlist();
+		this.loadData('refresh');
+	},
+	//下拉刷新
+	onPullDownRefresh() {
+		let obj = this;
+		//监听下拉刷新动作的执行方法,每次手动下拉刷新都会执行一次
+		obj.loadData('refresh');
+	},
+	// 加载完成后重置无限加载商品包裹框高度
+	// onReady() {
+	// 	let obj = this;
+	// 	// 处理数据加载完毕则加载数据
+	// 	obj.onlodingTrue().then(e => {
+	// 		obj.scrollHeight = e.pageHeight - e.topHeight - e.bottomHeight;
+	// 		obj.loadData();
+	// 	});
+	// },
+	//分享
+	// onShareAppMessage(options) {
+	// 	// 设置菜单中的转发按钮触发转发事件时的转发内容
+	// 	let shareObj = {
+	// 		title: '点击进入拼团', // 默认是小程序的名称(可以写slogan等)
+	// 		path: '/pages/groupBooking/index?spread=' + this.userInfo.uid, // 默认是当前页面,必须是以‘/’开头的完整路径
+	// 		imageUrl: 'http://shicai.liuniu946.com/static/img/pinkShare.jpg',
+	// 		success: function(res) {
+	// 			// 转发成功之后的回调
+	// 			if (res.errMsg == 'shareAppMessage:ok') {
+	// 			}
+	// 		},
+	// 		fail: function() {
+	// 			// 转发失败之后的回调
+	// 			if (res.errMsg == 'shareAppMessage:fail cancel') {
+	// 				// 用户取消转发
+	// 			} else if (res.errMsg == 'shareAppMessage:fail') {
+	// 				// 转发失败,其中 detail message 为详细失败信息
+	// 			}
+	// 		}
+	// 	}; // 来自页面内的按钮的转发 // 返回shareObj
+	// 	return shareObj;
+	// },
+	methods: {
+		
+		// 消息通知
+		tongzhi() {
+			this.$refs.popup.close()
+			wx.requestSubscribeMessage({
+				tmplIds: ['upq4J5ZQqRx-se7KgRdWS5d-l7EXKdAKT8W_J6HF70g','XKBGRmGwCzpT6oZZ0m6CF8nOS-eyGoDAI2KMSO4R4JY', '93fUZzhSsYNpBcDgFSgTDk3raKodD-bedAvfl3V4Iho'],
+				  success (res) { 
+						uni.showToast({
+							title:'开启通知成功',
+							success() {
+								setTimeout(function() {
+									uni.navigateTo({
+										url: '/pages/order/order?state=1'
+									})
+								}, 1000);
+							}
+						})
+					}
+			})
+		},
+		
+		// 播放视频
+		ToBofang() {
+			uni.navigateTo({
+				url: '/pages/groupBooking/video'
+			})
+		},
+		
+		// 获取营业时间
+		async Getlist() {
+			loadIndexs({})
+				.then(({ data }) => {
+					let arr = data.sell_time.split(',');
+					this.workstarTime = arr[0];
+					this.workendTime = arr[1];
+					this.StartDate();
+					this.GetDate();
+				})
+				.catch(e => {
+					
+				});
+		},
+		//点击切换商品种类
+		change(index) {
+			if( index == 1 && this.userInfo.is_promoter == 0 ) {
+				this.$api.msg('请先成为团长');
+				setTimeout(() => {
+					uni.navigateTo({
+						url: '/pages/notice/poster?id=5'
+					})
+				}, 1000);
+				return;
+			} else {
+				this.checkedTab = index
+				if(this.checkedTab == 0){
+					this.sid = 132;
+				}else{
+					this.sid = 131;
+				}
+				console.log(this.sid,55)
+				this.loadData('tabChange');
+			}
+			// if( this.userInfo.is_promoter == 0) {
+			// 	this.$api.msg('请先成为团长');
+			// 	setTimeout(() => {
+			// 		uni.navigateTo({
+			// 			url: '/pages/notice/poster?id=5'
+			// 		})
+			// 	}, 1000);
+				
+			// 	return;
+			// } else {
+			// 	this.checkedTab = index
+			// 	if(this.checkedTab == 0){
+			// 		this.sid = 132;
+			// 	}else{
+			// 		this.sid = 131;
+			// 	}
+			// 	console.log(this.sid,55)
+			// 	this.loadData('tabChange');
+			// }
+			
+		},
+		StartDate() {
+			let obj = this;
+			//console.log(obj.workstarTime)
+			//console.log(this.workendTime)
+			// 获取当前时间
+			let now = new Date();
+			let year = now.getFullYear(); //得到年份
+			let month = now.getMonth();//得到月份
+			let date = now.getDate();//得到日期
+			let hour = now.getHours();//得到小时
+			let minu = now.getMinutes();//得到分钟
+			let sec = now.getSeconds();//得到秒
+			//获取早上开始营业的时间戳
+			let aa = this.workstarTime.split(':');
+			let bb = aa[0];
+			let cc = aa[1];
+			let dd = String(cc).split('');
+			let ff = dd[0];
+			let gg = dd[1];
+			//console.log(bb,ff,gg)
+			let time1 = new Date(year,month,date,bb,ff,gg);
+			let morning = time1.getTime();
+			//获取现在时间的时间戳
+			let time2 = new Date(year,month,date,hour,minu,sec);
+			let present = time2.getTime();
+			//获取晚上结束营业的时间戳
+			let a = this.workendTime.split(':');
+			let b = a[0];
+			let c = a[1];
+			let d = String(c).split('');
+			let f = d[0];
+			let g = d[1];
+			//console.log(b,f,g)
+			let time3 = new Date(year,month,date,b,f,g);
+			//console.log(time1,'time1')
+			//console.log(time3,'time3')
+			let night = time3.getTime();
+			//现在时间大于结束时间,活动结束
+			// if(present > time3){
+			// 	console.log('现在时间大于结束时间,活动结束')
+			// 	obj.end = true;
+			// }
+			//现在时间大于开始时间小于结束时间,活动进行中
+			if(present < time3 &&  present > time1){
+				//console.log('现在时间大于开始时间小于结束时间,活动进行中')
+				obj.Timeing = true;
+				let starTime = time3 - present;
+				let hours = Math.floor((starTime / 1000 / 60 / 60) % 24); //获取剩余小时数
+				let minutes = Math.floor((starTime / 1000 / 60) % 60); //获取分钟
+				let seconds = Math.floor((starTime / 1000) % 60); //获取秒数
+				obj.Timeinghour = hours;
+				obj.Timeingminute = minutes;
+				obj.Timeingsecond = seconds;
+				 //console.log('时间差是: '+ obj.Timeinghour + '小时, ' + obj.Timeingminute + '分钟, ' + obj.Timeingsecond + '秒','距离晚上22:00点结束');
+			}
+			//现在时间小于开始时间,活动还未开始
+			if(present < time1){
+				//console.log('现在时间小于开始时间,活动还未开始')
+				obj.starting = true;
+				let  starTime = time1 - present;
+				let hours = Math.floor((starTime / 1000 / 60 / 60) % 24); //获取剩余小时数
+				let minutes = Math.floor((starTime / 1000 / 60) % 60); //获取分钟
+				let seconds = Math.floor((starTime / 1000) % 60); //获取秒数
+				obj.starthour = hours;
+				obj.startminute = minutes;
+				obj.startsecond = seconds;
+				 //console.log('时间差是: '+ obj.starthour + '小时, ' + obj.startminute + '分钟, ' + obj.startsecond + '秒','距离早上7:00点开始');
+			}
+			//现在时间距离第二天开始时间
+			// day3.setTime(day3.getTime()+24*60*60*1000);
+			// var s3 = day3.getFullYear()+"-" + (day3.getMonth()+1) + "-" + day3.getDate();
+			
+		},
+		//获取明天早上7:00的时间戳
+		GetDate(){
+			let obj = this;
+			let now = new Date();
+			//现在时间转换成时间戳
+			let nowTime = now.getTime();
+			now.setTime(now.getTime()+24*60*60*1000);
+			let time = obj.workstarTime;
+			let data = now.getFullYear() + '-' + (now.getMonth() + 1) + '-' + now.getDate() + ' ' + time;
+			data = data.replace(/-/g, '/');
+			let time4 = new Date(data);
+			let tomorrow = time4.getTime();
+			let starTime = tomorrow - nowTime;
+			let hours = Math.floor((starTime / 1000 / 60 / 60) % 24); //获取剩余小时数
+			let minutes = Math.floor((starTime / 1000 / 60) % 60); //获取分钟
+			let seconds = Math.floor((starTime / 1000) % 60); //获取秒数
+			obj.hour = hours;
+			obj.minute = minutes;
+			obj.second = seconds;
+			//console.log('时间差是: '+ hours + '小时, ' + minutes + '分钟, ' + seconds + '秒','距离第二天6:40开始');
+			
+		},
+		// onlodingTrue() {
+		// 	let obj = this;
+		// 	return new Promise(function(resolve, reject) {
+		// 		let num = 0;
+		// 		let height = {
+		// 			topHeight: 0,
+		// 			bottomHeight: 0,
+		// 			pageHeight: 0
+		// 		};
+		// 		// 初始化获取头部宽度
+		// 		uni.createSelectorQuery()
+		// 			.select('#pinkBanner')
+		// 			.fields(
+		// 				{
+		// 					size: true
+		// 				},
+		// 				data => {
+		// 					// 计算最多下拉的高度
+		// 					height.topHeight = data.height;
+		// 					num++;
+		// 					if (num == 3) {
+		// 						resolve(height);
+		// 					}
+		// 				}
+		// 			)
+		// 			.exec();
+		// 		// 初始化获取底部分享宽度
+		// 		uni.createSelectorQuery()
+		// 			.select('.shareDate')
+		// 			.fields(
+		// 				{
+		// 					size: true
+		// 				},
+		// 				data => {
+		// 					// 计算最多下拉的高度
+		// 					height.bottomHeight = data.height;
+		// 					num++;
+		// 					if (num == 3) {
+		// 						resolve(height);
+		// 					}
+		// 				}
+		// 			)
+		// 			.exec();
+		// 		// 初始化获取底部分享宽度
+		// 		uni.createSelectorQuery()
+		// 			.select('.container')
+		// 			.fields(
+		// 				{
+		// 					size: true
+		// 				},
+		// 				data => {
+		// 					// 计算最多下拉的高度
+		// 					height.pageHeight = data.height;
+		// 					num++;
+		// 					if (num == 3) {
+		// 						resolve(height);
+		// 					}
+		// 				}
+		// 			)
+		// 			.exec();
+		// 	});
+		// },
+		// 查询分类切换
+		// changeTab(e) {
+		// 	this.checkedTab = e.target.current;
+		// 	this.loadData('tabChange');
+		// },
+		// 请求商品列表
+		async loadData() {
+			let obj = this;
+			getCombinationList({
+				type: obj.sid,
+				page: 1,
+				limit: 100
+			})
+				.then(({ data }) => {
+					let arr = data.map(e => {
+						e.images = e.images.slice(0, 2);
+						return e;
+					});
+					obj.list = arr;
+					console.log(obj.list);
+				})
+				.catch(e => {
+					console.log(e);
+				});
+		},
+		
+		// 一键拼团
+		pinkAuto() {
+			console.log(this.userInfo.is_promoter,999)
+			// if( this.userInfo.is_promoter == 0) {
+			// 	this.$api.msg('请先成为团长');
+			// 	setTimeout(() => {
+			// 		uni.navigateTo({
+			// 			url: '/pages/notice/poster?id=5'
+			// 		})
+			// 	}, 1000);
+				
+			// 	return;
+			// }
+			autoPink({}).then((data) => {
+				console.log(data,5673)
+				this.$api.msg(data.msg)
+				
+				this.$refs.popup.open()
+				
+			})
+			.catch(e => {
+				console.log(e.message);
+				if (e.message == '请先设置拼团地址') {
+					this.$api.msg(e.msg)
+					setTimeout(function() {
+						uni.navigateTo({
+							url: '/pages/address/addressPink'
+						})
+					}, 1000);
+					
+					
+				}
+			})
+		},
+		
+		//加入购物车
+		Addcar(item) {
+			let obj = this;
+			uni.navigateTo({
+				url: '/pages/product/groupdetails?id='+ item.id
+			})
+		},
+		//跳转商品详情页
+		navToDetailPage(ls) {
+			let obj = this;
+			let id = ls.id;
+			uni.navigateTo({
+				url: '/pages/product/productGroup?id=' + id
+			});
+		}
+	}
+};
+</script>
+<style lang="scss">
+page,
+.container {
+	// background: #F3F3F4;
+	// background: #b33ec5;
+	background: linear-gradient(90deg, rgba(185,60,254, 1) 0%, rgba(197,122,255, 1) 100%);
+	height: 100%;
+}
+.top-img {
+	width: 100%;
+	height: 180rpx;
+	position: relative;
+	image {
+		width: 100%;
+		height: 100%;
+	}
+	.bofang {
+		width: 60rpx;
+		height: 60rpx;
+		position: absolute;
+		top: 33%;
+		left: 47%;
+		z-index: 99;
+	}
+}
+
+.switch-bar {
+	width: 100%;
+	font-size: 32rpx;
+	background-color: #FFFFFF;
+	// border-radius: 65rpx 65rpx 0 0;
+	.switchList {
+		padding: 28rpx 0rpx;
+		text-align: center;
+		// width: 50%;
+		width: 100%;
+		.time {
+			font-size: 38rpx;
+			font-weight: bold;
+		}
+		.name {
+			font-size: 26rpx;
+			margin-top: 10rpx;
+		}
+		.drname {
+			color: #FE0000;
+		}
+	}
+	.switchimg{
+		position: absolute;
+		left: 23%;
+		image{
+			width: 24rpx;
+			height: 13rpx;
+		}
+	}
+	.switchimgshow{
+		left:73.5%;
+	}
+	.active_color {
+		// background: linear-gradient(270deg, #fe531e 0%, #fe9503 100%);
+		background: linear-gradient(270deg, rgba(181,116,242, 1) 0%, rgba(139,86,254, 1) 100%);
+		// border-radius: 100rpx;
+		// margin: 10rpx 10rpx 0;
+		color: #ffffff;
+		box-shadow: 2px 3px 2px #888888;
+		
+	}
+}
+.tip {
+	width: 100%;
+	height: 76rpx;
+	background-color: #FFFFFF;
+	// justify-content: space-around;
+	}
+	.time-box{
+		width: 50%;
+		padding: 0rpx 25rpx;
+		font-size:27rpx;
+		// justify-content: space-around;
+		justify-content: center;
+	}
+	.time-name{
+		font-size:27rpx;
+	}
+	.tab-content{
+		padding: 25rpx 25rpx 100rpx 25rpx;
+		background: #F3F3F4;
+	}
+	.preferred_item {
+		width: 100%;
+		height: 100%;
+		padding: 25rpx 25rpx;
+		position: relative;
+		background-color: #FFFFFF;
+		border-radius: 15rpx;
+		margin-bottom: 15rpx;
+		.tlist-img {
+			width: 225rpx;
+			position: relative;
+			margin-right: 15rpx;
+			.leftImgIcon {
+				position: absolute;
+				top: 0;
+				left: 0;
+				font-size: 22rpx;
+				font-family: PingFangSC;
+				// color: rgba(148, 71, 34, 1);
+				// background: rgba(254, 242, 111, 1);
+				color: #FFFFFF;
+				background: linear-gradient(270deg, rgba(181,116,242, 1) 0%, rgba(139,86,254, 1) 100%);
+				z-index: 99;
+				border-radius: 5rpx;
+				padding: 5rpx 10rpx;
+			}
+			.img {
+				width: 210rpx;
+				height: 210rpx;
+				image {
+					width: 100%;
+					height: 100%;
+					border-radius: 20rpx;
+				}
+			}
+			.stock {
+				margin-top: 13rpx;
+				font-size: 26rpx;
+				background: #fff1ee;
+				width: 100%;
+				color: #fb4912;
+				padding: 6rpx 0;
+				border-radius: 5rpx;
+				justify-content: center;
+				align-items: center;
+				position: absolute;
+				left: 0;
+				bottom: 0;
+				.img {
+					width: 20rpx;
+					height: 20rpx;
+					flex-shrink: 0;
+				}
+				.stock-num {
+					padding-left: 7rpx;
+					font-size: 22rpx;
+					border-radius: 5rpx;
+					height: 32rpx;
+					line-height: 32rpx;
+				}
+			}
+		}
+		.goods_name {
+			.AAgoods_title {
+				padding-top: 15rpx;
+				color:rgba(0,0,0,1);
+				// white-space: nowrap;
+				// overflow: hidden;
+				// text-overflow: ellipsis;
+				font-size:32rpx;
+				color: $font-color-dark;
+				// height: 70rpx;
+				display: flex;
+				align-items: baseline;
+				.text{
+					border-radius: 8rpx;
+					border: 2rpx solid #FF1A27;
+					color: #FF1A27;
+					padding:0rpx 10rpx;
+					font-size: 26rpx !important;
+					margin-right: 15rpx;
+					
+				}
+				.AAtitle {
+					width: 80%;
+					overflow: hidden;
+					text-overflow: ellipsis;
+					display: -webkit-box;
+					-webkit-line-clamp: 2;
+					-webkit-box-orient: vertical;
+				}
+			}
+			.goods_title {
+				padding-top: 15rpx;
+				color:rgba(0,0,0,1);
+				white-space: nowrap;
+				overflow: hidden;
+				text-overflow: ellipsis;
+				font-size:32rpx;
+				color: $font-color-dark;
+				height: 70rpx;
+				.text{
+					border-radius: 8rpx;
+					border: 2rpx solid #FF1A27;
+					color: #FF1A27;
+					padding:0rpx 10rpx;
+					font-size: 26rpx !important;
+					margin-right: 15rpx;
+					
+				}
+			}
+			.goods-height {
+				min-height: 60rpx;
+			}
+			.goods_num {
+				font-size: 26rpx;
+				color: #8f8f97;
+				padding-bottom: 15rpx;
+			}
+			.goods-peplo {
+				height: 45rpx;
+				margin-top: 15rpx;
+				.right {
+					color:#8e8e8e;
+					font-size: 24rpx;
+					width:195rpx;
+					image {
+						width: 30rpx;
+						height: 33rpx;
+						margin-right: 15rpx;
+					}
+				}
+				.goods-tip {
+					.peplo {
+						background:linear-gradient(14deg,rgba(255,116,37,1),rgba(255,30,41,1));
+						padding: 5rpx 10rpx;
+						color: #ffffff;
+						border-top-left-radius:8rpx;
+						border-bottom-left-radius: 8rpx;
+					}
+					.make {
+						background-color: #fef26f;
+						color: #944722;
+						border-top-right-radius: 8rpx;
+						border-bottom-right-radius: 8rpx;
+					}
+					.make,
+					.peplo {
+						font-size: $font-sm;
+						padding: 5rpx 10rpx;
+					}
+				}
+			}
+			.price {
+				font-size: 28rpx;
+				position: relative;
+				padding-top: 15rpx;
+				.price_list {
+					.price-red {
+						font-size: 30rpx !important;
+						font-family: Source Han Sans CN;
+						color: rgba(253, 27, 42, 1);
+						font-size: $font-base;
+						font-weight: bold;
+						.moneyIcon {
+							font-weight: normal !important; 
+						}
+						.money {
+							font-size: 58rpx;
+						}
+						.moneyType {
+							font-weight: 400;
+						}
+						.outMoney {
+							font-weight: 400;
+							text-decoration: line-through;
+							color: rgba(142, 142, 142, 1);
+						}
+					}
+					.price-green {
+						color: #2dbd59;
+						font-size: 26rpx !important;
+						font-weight: bold;
+						text {
+							background: linear-gradient(45deg, rgba(21, 197, 52, 1), rgba(21, 197, 52, 1));
+							color: #ffffff;
+							padding: 0rpx 10rpx;
+							border-radius: 7rpx;
+							font-size: 24rpx !important;
+							margin-left: 15rpx;
+						}
+					}
+				}
+				.img {
+					width: 265rpx;
+					height: 74rpx;
+					line-height: 74rpx;
+					// background:linear-gradient(14deg,rgba(255,116,37,1),rgba(255,30,41,1));
+					background: linear-gradient(270deg, rgba(181,116,242, 1) 0%, rgba(139,86,254, 1) 100%);
+					border-radius: 99rpx;
+					color: #ffffff;
+					font-size: $font-lg;
+					text-align: center;
+				}
+				.img1{
+					background-color: #D3D3D3;
+					width: 265rpx;
+					height: 74rpx;
+					line-height: 74rpx;
+					border-radius: 99rpx;
+					color: #ffffff;
+					font-size: $font-lg;
+					text-align: center;
+				}
+				.tomorrow {
+					background: #29a66e;
+					color: #ffffff;
+					border-radius: 25rpx;
+					padding: 10rpx 25rpx;
+				}
+			}
+		}
+	}
+.shareDate {
+	width: 100%;
+	font-size: 28rpx;
+	// background: linear-gradient(270deg, #fe531e 0%, #fe9503 100%);
+	background: linear-gradient(270deg, rgba(181,116,242, 1) 0%, rgba(139,86,254, 1) 100%);
+	padding: 25rpx 0rpx;
+	line-height: 1;
+	text-align: center;
+	color: #ffffff;
+	position: fixed;
+	bottom: 0;
+	border: none;
+	border-radius: 0rpx !important;
+	z-index: 999;
+}
+
+.pop-box {
+	background: #FFFFFF;
+	width: 600rpx;
+	border-radius: 20rpx;
+	padding: 30rpx 20rpx;
+	.pop-text {
+		text-align: center;
+		font-size: 32rpx;
+	}
+	.pop-button {
+		margin: 0 auto;
+		font-size: 30rpx;
+		margin-top: 30rpx;
+		padding: 10rpx 0;
+		border-radius: 15rpx;
+		text-align: center;
+		width: 200rpx;
+		color: #FFFFFF;
+		background: $base-color;
+	}
+}
+</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>

+ 790 - 0
pages/groupBooking/klondike.vue

@@ -0,0 +1,790 @@
+<template>
+	<view class="container">
+		<view class="top-box">
+			<view class="top-img"><image src="http://shicai.liuniu946.com/img/KlonBanner.png"></image></view>
+			<!-- <view class="switch-bar flex_item">
+				<view class="switchList" @click="change(index)" :key="index" v-for="(ls, index) in switchList" v-bind:class="{ active_color: index == checkedTab }">
+					<view class="time">{{ ls.time }}</view>
+					<view class="name">{{ ls.name }}</view>
+					<view class="switchimg" v-bind:class="{ switchimgshow: index == 1 }"><image src="/static/img/img084.png"></image></view>
+				</view>
+			</view> -->
+			<view class="tip">
+				<view class="time-box flex" >
+					<view class="time-name">选择商品复制文案发起群接龙,抢先买好货!</view>
+					<!-- <view class="flex_item" v-show="starting">
+						<view>距开始</view>
+						<uni-countdown color="#FFFFFF" background-color="#334432" 
+							:show-day="false" 
+							:hour="starthour" 
+							:minute="startminute" 
+							:second="startsecond">
+						</uni-countdown>
+					</view> -->
+					<!-- <view class="flex_item" v-show="Timeing">
+						<view>距结束</view>
+						<uni-countdown color="#FFFFFF" background-color="#334432" 
+							:show-day="false" 
+							:hour="Timeinghour" 
+							:minute="Timeingminute" 
+							:second="Timeingsecond">
+						</uni-countdown>
+					</view> -->
+				</view>
+			</view>
+		</view>
+		<view class="tab-content">
+			<view class="preferred_item" v-for="item in list" @click="navToDetailPage(item)">
+				<view class="flex_item">
+					<view class="tlist-img">
+						<view class="leftImgIcon">接龙团</view>
+						<!-- <view class="leftImgIcon" v-if="sid == 131">达人团</view> -->
+						<view class="img"><image :src="item.image" mode="scaleToFill"></image></view>
+					</view>
+					<view class="tlist-img " v-for="imgItem in item.images">
+						<view class="img"><image :src="imgItem" mode="scaleToFill"></image></view>
+					</view>
+				</view>
+				<view class="goods_name">
+					<view class="goods_title flex_item">
+						<!-- <view class="text">{{ item.min_people }}人团</view> -->
+						<view class="title-text">{{ item.title }}</view>
+					</view>
+					<view class="goods-height">
+						<!-- <view class="goods_num clamp">{{ item.info }}</view> -->
+						<view class="flex goods-peplo">
+							<view class="goods-tip flex_item">
+								<view class="peplo">库存剩{{ item.percent | parseIntTo }}%</view>
+								<view class="make">{{ item.mark }}</view>
+							</view>
+							<!-- <view class="right flex_item">
+								<image src="/static/icon/hot.png" mode="aspectFill"></image>
+								<text>已拼{{ item.order_count }}/份</text>
+							</view> -->
+						</view>
+					</view>
+					<view class="price flex">
+						<view class="price_list">
+							<view class="price-red">
+								<text class="moneyIcon">¥</text>
+								<text class="money">{{ item.price }}</text>
+								<text class="moneyType">/{{ item.unit_name }}</text>
+								<text class="outMoney">¥{{ item.product_price }}</text>
+							</view>
+						</view>
+						
+						<!-- <view v-if="item.stock >0 " class="img position-relative" @click.stop="Addcar(item)">去开团</view> -->
+						<view v-if="item.stock >0 " class="img position-relative" @click.stop="navToDetailPage(item)">去接龙</view>
+						<view v-if="item.stock <1 " class="img1 position-relative">已售罄</view>
+						<!-- <view v-if="sid == 131 && item.stock <1 " class="img1 position-relative">敬请期待</view> -->
+					</view>
+				</view>
+			</view>
+		</view>
+		<!-- <button open-type="share" class="shareDate">分享给好友</button> -->
+		
+	</view>
+</template>
+<script>
+// import { cartAdd, autoPink } from '@/api/product.js';
+import { getCombinationList, KlonList } from '@/api/groupBooking.js';
+import { loadIndexs } from '@/api/index.js';
+
+import { saveUrl, interceptor } from '@/utils/loginUtils.js';
+import { mapState } from 'vuex';
+import uniLoadMore from '@/components/uni-load-more/uni-load-more.vue';
+import empty from '@/components/empty';
+import uniCountdown from '@/components/uni-countdown/uni-countdown.vue';
+import uniPopup from '@/components/uni-popup/uni-popup.vue';
+export default {
+	computed: {
+		...mapState('user', ['userInfo', 'hasLogin']),
+		...mapState(['addressData', 'addressPageShow'])
+	},
+	components: {
+		empty,
+		uniLoadMore,
+		uniCountdown,
+		uniPopup,
+	},
+	data() {
+		return {
+			scrollHeight: 0, // 底部分享按钮高度
+			checkedTab: 0, // 当前选中的切换页面
+			
+			sid:132,
+			list:[],
+			checkid:0,
+			//倒计时
+			hour: 0,//距离明天8点开始时间
+			minute: 0,
+			second: 0,
+			
+			starting: false,//判断活动未开始
+			Timeing:false,//判断活动进行中
+			
+			starthour:0,//距离今天开始时间
+			startminute:0,
+			startsecond:0,
+			
+			Timeinghour:0,//距离今天结束时间
+			Timeingminute:0,
+			Timeingsecond:0,
+			
+			workstarTime:'',
+			workendTime:'',
+		};
+	},
+	filters: {
+		parseIntTo(percent) {
+			percent = +percent * 100;
+			if (percent % 1 === 0) {
+				return percent;
+			} else {
+				percent = percent.toFixed(1);
+				return percent;
+			}
+		}
+	},
+	onLoad(option) {
+		// 判断是否登录
+		if (!this.hasLogin) {
+			interceptor();
+		}
+		// 判断有无邀请人
+		if (option.spread) {
+			uni.setStorageSync('spread', option.spread);
+		}
+		saveUrl();
+	},
+	onShow() {
+		this.Getlist();
+		this.loadData('refresh');
+	},
+	//下拉刷新
+	onPullDownRefresh() {
+		let obj = this;
+		//监听下拉刷新动作的执行方法,每次手动下拉刷新都会执行一次
+		obj.loadData('refresh');
+	},
+	// 加载完成后重置无限加载商品包裹框高度
+	// onReady() {
+	// 	let obj = this;
+	// 	// 处理数据加载完毕则加载数据
+	// 	obj.onlodingTrue().then(e => {
+	// 		obj.scrollHeight = e.pageHeight - e.topHeight - e.bottomHeight;
+	// 		obj.loadData();
+	// 	});
+	// },
+	//分享
+	// onShareAppMessage(options) {
+	// 	// 设置菜单中的转发按钮触发转发事件时的转发内容
+	// 	let shareObj = {
+	// 		title: '点击进入拼团', // 默认是小程序的名称(可以写slogan等)
+	// 		path: '/pages/groupBooking/klondike?spread=' + this.userInfo.uid, // 默认是当前页面,必须是以‘/’开头的完整路径
+	// 		imageUrl: 'http://shicai.liuniu946.com/static/img/pinkShare.jpg',
+	// 		success: function(res) {
+	// 			// 转发成功之后的回调
+	// 			if (res.errMsg == 'shareAppMessage:ok') {
+	// 			}
+	// 		},
+	// 		fail: function() {
+	// 			// 转发失败之后的回调
+	// 			if (res.errMsg == 'shareAppMessage:fail cancel') {
+	// 				// 用户取消转发
+	// 			} else if (res.errMsg == 'shareAppMessage:fail') {
+	// 				// 转发失败,其中 detail message 为详细失败信息
+	// 			}
+	// 		}
+	// 	}; // 来自页面内的按钮的转发 // 返回shareObj
+	// 	return shareObj;
+	// },
+	methods: {
+		
+		// 消息通知
+		// tongzhi() {
+		// 	this.$refs.popup.close()
+		// 	wx.requestSubscribeMessage({
+		// 		tmplIds: ['upq4J5ZQqRx-se7KgRdWS5d-l7EXKdAKT8W_J6HF70g','XKBGRmGwCzpT6oZZ0m6CF8nOS-eyGoDAI2KMSO4R4JY', '93fUZzhSsYNpBcDgFSgTDk3raKodD-bedAvfl3V4Iho'],
+		// 		  success (res) { 
+		// 				uni.showToast({
+		// 					title:'开启通知成功',
+		// 					success() {
+		// 						setTimeout(function() {
+		// 							uni.navigateTo({
+		// 								url: '/pages/order/order?state=1'
+		// 							})
+		// 						}, 1000);
+		// 					}
+		// 				})
+		// 			}
+		// 	})
+		// },
+		
+		// 获取营业时间
+		async Getlist() {
+			loadIndexs({})
+				.then(({ data }) => {
+					let arr = data.sell_time.split(',');
+					this.workstarTime = arr[0];
+					this.workendTime = arr[1];
+					this.StartDate();
+					this.GetDate();
+				})
+				.catch(e => {
+					
+				});
+		},
+		//点击切换商品种类
+		change(index) {
+			// 当前选中的对象
+			if( this.userInfo.is_promoter == 0) {
+				this.$api.msg('请先成为团长');
+				setTimeout(() => {
+					uni.navigateTo({
+						url: '/pages/notice/poster?id=5'
+					})
+				}, 1000);
+				
+				return;
+			} else {
+				this.checkedTab = index
+				if(this.checkedTab == 0){
+					this.sid = 132;
+				}else{
+					this.sid = 131;
+				}
+				console.log(this.sid,55)
+				this.loadData('tabChange');
+			}
+			
+		},
+		StartDate() {
+			let obj = this;
+			//console.log(obj.workstarTime)
+			//console.log(this.workendTime)
+			// 获取当前时间
+			let now = new Date();
+			let year = now.getFullYear(); //得到年份
+			let month = now.getMonth();//得到月份
+			let date = now.getDate();//得到日期
+			let hour = now.getHours();//得到小时
+			let minu = now.getMinutes();//得到分钟
+			let sec = now.getSeconds();//得到秒
+			//获取早上开始营业的时间戳
+			let aa = this.workstarTime.split(':');
+			let bb = aa[0];
+			let cc = aa[1];
+			let dd = String(cc).split('');
+			let ff = dd[0];
+			let gg = dd[1];
+			//console.log(bb,ff,gg)
+			let time1 = new Date(year,month,date,bb,ff,gg);
+			let morning = time1.getTime();
+			//获取现在时间的时间戳
+			let time2 = new Date(year,month,date,hour,minu,sec);
+			let present = time2.getTime();
+			//获取晚上结束营业的时间戳
+			let a = this.workendTime.split(':');
+			let b = a[0];
+			let c = a[1];
+			let d = String(c).split('');
+			let f = d[0];
+			let g = d[1];
+			//console.log(b,f,g)
+			let time3 = new Date(year,month,date,b,f,g);
+			//console.log(time1,'time1')
+			//console.log(time3,'time3')
+			let night = time3.getTime();
+			//现在时间大于结束时间,活动结束
+			// if(present > time3){
+			// 	console.log('现在时间大于结束时间,活动结束')
+			// 	obj.end = true;
+			// }
+			//现在时间大于开始时间小于结束时间,活动进行中
+			if(present < time3 &&  present > time1){
+				//console.log('现在时间大于开始时间小于结束时间,活动进行中')
+				obj.Timeing = true;
+				let starTime = time3 - present;
+				let hours = Math.floor((starTime / 1000 / 60 / 60) % 24); //获取剩余小时数
+				let minutes = Math.floor((starTime / 1000 / 60) % 60); //获取分钟
+				let seconds = Math.floor((starTime / 1000) % 60); //获取秒数
+				obj.Timeinghour = hours;
+				obj.Timeingminute = minutes;
+				obj.Timeingsecond = seconds;
+				 //console.log('时间差是: '+ obj.Timeinghour + '小时, ' + obj.Timeingminute + '分钟, ' + obj.Timeingsecond + '秒','距离晚上22:00点结束');
+			}
+			//现在时间小于开始时间,活动还未开始
+			if(present < time1){
+				//console.log('现在时间小于开始时间,活动还未开始')
+				obj.starting = true;
+				let  starTime = time1 - present;
+				let hours = Math.floor((starTime / 1000 / 60 / 60) % 24); //获取剩余小时数
+				let minutes = Math.floor((starTime / 1000 / 60) % 60); //获取分钟
+				let seconds = Math.floor((starTime / 1000) % 60); //获取秒数
+				obj.starthour = hours;
+				obj.startminute = minutes;
+				obj.startsecond = seconds;
+				 //console.log('时间差是: '+ obj.starthour + '小时, ' + obj.startminute + '分钟, ' + obj.startsecond + '秒','距离早上7:00点开始');
+			}
+			//现在时间距离第二天开始时间
+			// day3.setTime(day3.getTime()+24*60*60*1000);
+			// var s3 = day3.getFullYear()+"-" + (day3.getMonth()+1) + "-" + day3.getDate();
+			
+		},
+		//获取明天早上7:00的时间戳
+		GetDate(){
+			let obj = this;
+			let now = new Date();
+			//现在时间转换成时间戳
+			let nowTime = now.getTime();
+			now.setTime(now.getTime()+24*60*60*1000);
+			let time = obj.workstarTime;
+			let data = now.getFullYear() + '-' + (now.getMonth() + 1) + '-' + now.getDate() + ' ' + time;
+			data = data.replace(/-/g, '/');
+			let time4 = new Date(data);
+			let tomorrow = time4.getTime();
+			let starTime = tomorrow - nowTime;
+			let hours = Math.floor((starTime / 1000 / 60 / 60) % 24); //获取剩余小时数
+			let minutes = Math.floor((starTime / 1000 / 60) % 60); //获取分钟
+			let seconds = Math.floor((starTime / 1000) % 60); //获取秒数
+			obj.hour = hours;
+			obj.minute = minutes;
+			obj.second = seconds;
+			//console.log('时间差是: '+ hours + '小时, ' + minutes + '分钟, ' + seconds + '秒','距离第二天6:40开始');
+			
+		},
+		// onlodingTrue() {
+		// 	let obj = this;
+		// 	return new Promise(function(resolve, reject) {
+		// 		let num = 0;
+		// 		let height = {
+		// 			topHeight: 0,
+		// 			bottomHeight: 0,
+		// 			pageHeight: 0
+		// 		};
+		// 		// 初始化获取头部宽度
+		// 		uni.createSelectorQuery()
+		// 			.select('#pinkBanner')
+		// 			.fields(
+		// 				{
+		// 					size: true
+		// 				},
+		// 				data => {
+		// 					// 计算最多下拉的高度
+		// 					height.topHeight = data.height;
+		// 					num++;
+		// 					if (num == 3) {
+		// 						resolve(height);
+		// 					}
+		// 				}
+		// 			)
+		// 			.exec();
+		// 		// 初始化获取底部分享宽度
+		// 		uni.createSelectorQuery()
+		// 			.select('.shareDate')
+		// 			.fields(
+		// 				{
+		// 					size: true
+		// 				},
+		// 				data => {
+		// 					// 计算最多下拉的高度
+		// 					height.bottomHeight = data.height;
+		// 					num++;
+		// 					if (num == 3) {
+		// 						resolve(height);
+		// 					}
+		// 				}
+		// 			)
+		// 			.exec();
+		// 		// 初始化获取底部分享宽度
+		// 		uni.createSelectorQuery()
+		// 			.select('.container')
+		// 			.fields(
+		// 				{
+		// 					size: true
+		// 				},
+		// 				data => {
+		// 					// 计算最多下拉的高度
+		// 					height.pageHeight = data.height;
+		// 					num++;
+		// 					if (num == 3) {
+		// 						resolve(height);
+		// 					}
+		// 				}
+		// 			)
+		// 			.exec();
+		// 	});
+		// },
+		// 查询分类切换
+		// changeTab(e) {
+		// 	this.checkedTab = e.target.current;
+		// 	this.loadData('tabChange');
+		// },
+		// 请求商品列表
+		async loadData() {
+			let obj = this;
+			KlonList({
+				page: 1,
+				limit: 100
+			})
+				.then(({ data }) => {
+					let arr = data.map(e => {
+						e.images = e.images.slice(0, 2);
+						return e;
+					});
+					obj.list = arr;
+					console.log(obj.list);
+				})
+				.catch(e => {
+					console.log(e);
+				});
+		},
+		
+		// 一键拼团
+		// pinkAuto() {
+		// 	console.log(this.userInfo.is_promoter,999)
+		// 	// if( this.userInfo.is_promoter == 0) {
+		// 	// 	this.$api.msg('请先成为团长');
+		// 	// 	setTimeout(() => {
+		// 	// 		uni.navigateTo({
+		// 	// 			url: '/pages/notice/poster?id=5'
+		// 	// 		})
+		// 	// 	}, 1000);
+				
+		// 	// 	return;
+		// 	// }
+		// 	autoPink({}).then((data) => {
+		// 		console.log(data,5673)
+		// 		this.$api.msg(data.msg)
+				
+		// 		this.$refs.popup.open()
+				
+		// 	})
+		// 	.catch(e => {
+		// 		console.log(e.message);
+		// 		if (e.message == '请先设置拼团地址') {
+		// 			this.$api.msg(e.msg)
+		// 			setTimeout(function() {
+		// 				uni.navigateTo({
+		// 					url: '/pages/address/addressPink'
+		// 				})
+		// 			}, 1000);
+					
+					
+		// 		}
+		// 	})
+		// },
+		
+		//加入购物车
+		// Addcar(item) {
+		// 	let obj = this;
+		// 	uni.navigateTo({
+		// 		url: '/pages/product/groupdetails?id='+ item.id
+		// 	})
+		// },
+		//跳转商品详情页
+		navToDetailPage(ls) {
+			let obj = this;
+			let id = ls.id;
+			// uni.navigateTo({
+			// 	url: '/pages/product/productGroup?id=' + id
+			// });
+			uni.navigateTo({
+				url: '/pages/product/productKlon?id=' + id
+			});
+		}
+	}
+};
+</script>
+<style lang="scss">
+page,
+.container {
+	background: #F3F3F4;
+	height: 100%;
+}
+.top-img {
+	width: 100%;
+	height: 220rpx;
+	image {
+		width: 100%;
+		height: 100%;
+	}
+}
+
+.switch-bar {
+	width: 100%;
+	font-size: 32rpx;
+	background-color: #FFFFFF;
+	.switchList {
+		padding: 28rpx 0rpx;
+		text-align: center;
+		width: 50%;
+		.time {
+			font-size: $font-lg;
+			font-weight: bold;
+		}
+		.name {
+			font-size: $font-sm;
+		}
+	}
+	.switchimg{
+		position: absolute;
+		left: 23%;
+		image{
+			width: 24rpx;
+			height: 13rpx;
+		}
+	}
+	.switchimgshow{
+		left:73.5%;
+	}
+	.active_color {
+		background: linear-gradient(270deg, #fe531e 0%, #fe9503 100%);
+		color: #ffffff;
+	}
+}
+.tip {
+	width: 100%;
+	height: 100rpx;
+	// background-color: #7400C2;
+	background-color: #FFFFFF;
+	// background:linear-gradient(14deg,rgba(255,116,37,1),rgba(255,30,41,1));
+	color: #000000;
+	// justify-content: space-around;
+	}
+	.time-box{
+		width: 100%;
+		padding: 20rpx 25rpx;
+		font-size:27rpx;
+		// justify-content: space-around;
+		justify-content: center;
+	}
+	.time-name{
+		font-size:27rpx;
+	}
+	.tab-content{
+		padding: 25rpx 25rpx 100rpx 25rpx;
+		border-radius: 30rpx;
+		background: #F3F3F4;
+		margin-top: -26rpx;
+	}
+	.preferred_item {
+		width: 100%;
+		height: 100%;
+		padding: 25rpx 25rpx;
+		position: relative;
+		background-color: #FFFFFF;
+		border-radius: 15rpx;
+		margin-bottom: 15rpx;
+		.tlist-img {
+			width: 225rpx;
+			position: relative;
+			margin-right: 15rpx;
+			.leftImgIcon {
+				position: absolute;
+				top: 0;
+				left: 0;
+				font-size: 22rpx;
+				font-family: PingFangSC;
+				// color: #FFFFFF;
+				// background: linear-gradient(270deg, rgba(181,116,242, 1) 0%, rgba(139,86,254, 1) 100%);
+				color: rgba(148, 71, 34, 1);
+				background: rgba(254, 242, 111, 1);
+				z-index: 99;
+				border-radius: 5rpx;
+				padding: 5rpx 10rpx;
+			}
+			.img {
+				width: 210rpx;
+				height: 210rpx;
+				image {
+					width: 100%;
+					height: 100%;
+					border-radius: 20rpx;
+				}
+			}
+			.stock {
+				margin-top: 13rpx;
+				font-size: 26rpx;
+				background: #fff1ee;
+				width: 100%;
+				color: #fb4912;
+				padding: 6rpx 0;
+				border-radius: 5rpx;
+				justify-content: center;
+				align-items: center;
+				position: absolute;
+				left: 0;
+				bottom: 0;
+				.img {
+					width: 20rpx;
+					height: 20rpx;
+					flex-shrink: 0;
+				}
+				.stock-num {
+					padding-left: 7rpx;
+					font-size: 22rpx;
+					border-radius: 5rpx;
+					height: 32rpx;
+					line-height: 32rpx;
+				}
+			}
+		}
+		.goods_name {
+			.goods_title {
+				padding-top: 15rpx;
+				color:rgba(0,0,0,1);
+				white-space: nowrap;
+				overflow: hidden;
+				text-overflow: ellipsis;
+				font-size:32rpx;
+				color: $font-color-dark;
+				height: 70rpx;
+				overflow: hidden;
+				text-overflow: ellipsis;
+				white-space: nowrap;
+				.title-text {
+					width: 100%;
+					overflow: hidden;
+					text-overflow: ellipsis;
+					white-space: nowrap;
+				}
+				.text{
+					border-radius: 8rpx;
+					border: 2rpx solid #FF1A27;
+					color: #FF1A27;
+					padding:0rpx 10rpx;
+					font-size: 26rpx !important;
+					margin-right: 15rpx;
+					
+				}
+			}
+			.goods-height {
+				min-height: 60rpx;
+			}
+			.goods_num {
+				font-size: 26rpx;
+				color: #8f8f97;
+				padding-bottom: 15rpx;
+			}
+			.goods-peplo {
+				height: 45rpx;
+				margin-top: 15rpx;
+				.right {
+					color:#8e8e8e;
+					font-size: 24rpx;
+					width:195rpx;
+					image {
+						width: 30rpx;
+						height: 33rpx;
+						margin-right: 15rpx;
+					}
+				}
+				.goods-tip {
+					.peplo {
+						background:linear-gradient(14deg,rgba(255,116,37,1),rgba(255,30,41,1));
+						padding: 5rpx 10rpx;
+						color: #ffffff;
+						border-top-left-radius:8rpx;
+						border-bottom-left-radius: 8rpx;
+					}
+					.make {
+						background-color: #fef26f;
+						color: #944722;
+						border-top-right-radius: 8rpx;
+						border-bottom-right-radius: 8rpx;
+					}
+					.make,
+					.peplo {
+						font-size: $font-sm;
+						padding: 5rpx 10rpx;
+					}
+				}
+			}
+			.price {
+				font-size: 28rpx;
+				position: relative;
+				padding-top: 15rpx;
+				.price_list {
+					.price-red {
+						font-size: 30rpx !important;
+						font-family: Source Han Sans CN;
+						color: rgba(253, 27, 42, 1);
+						font-size: $font-base;
+						font-weight: bold;
+						.moneyIcon {
+							font-weight: normal !important; 
+						}
+						.money {
+							font-size: 58rpx;
+						}
+						.moneyType {
+							font-weight: 400;
+						}
+						.outMoney {
+							font-weight: 400;
+							text-decoration: line-through;
+							color: rgba(142, 142, 142, 1);
+						}
+					}
+					.price-green {
+						color: #2dbd59;
+						font-size: 26rpx !important;
+						font-weight: bold;
+						text {
+							background: linear-gradient(45deg, rgba(21, 197, 52, 1), rgba(21, 197, 52, 1));
+							color: #ffffff;
+							padding: 0rpx 10rpx;
+							border-radius: 7rpx;
+							font-size: 24rpx !important;
+							margin-left: 15rpx;
+						}
+					}
+				}
+				.img {
+					width: 265rpx;
+					height: 74rpx;
+					line-height: 74rpx;
+					background:linear-gradient(14deg,rgba(255,116,37,1),rgba(255,30,41,1));
+					// background: linear-gradient(270deg, rgba(181,116,242, 1) 0%, rgba(139,86,254, 1) 100%);
+					border-radius: 99rpx;
+					color: #ffffff;
+					font-size: $font-lg;
+					text-align: center;
+				}
+				.img1{
+					background-color: #D3D3D3;
+					width: 265rpx;
+					height: 74rpx;
+					line-height: 74rpx;
+					border-radius: 99rpx;
+					color: #ffffff;
+					font-size: $font-lg;
+					text-align: center;
+				}
+				.tomorrow {
+					background: #29a66e;
+					color: #ffffff;
+					border-radius: 25rpx;
+					padding: 10rpx 25rpx;
+				}
+			}
+		}
+	}
+.shareDate {
+	width: 100%;
+	font-size: 28rpx;
+	background: linear-gradient(270deg, #fe531e 0%, #fe9503 100%);
+	padding: 25rpx 0rpx;
+	line-height: 1;
+	text-align: center;
+	color: #ffffff;
+	position: fixed;
+	bottom: 0;
+	border: none;
+	border-radius: 0rpx !important;
+	z-index: 999;
+}
+
+</style>

+ 445 - 0
pages/groupBooking/suborder.vue

@@ -0,0 +1,445 @@
+<template>
+	<view class="container">
+		<view class="top">
+		</view>
+		<view class="content-box">
+			<view class="tit">
+				站点自提
+			</view>
+			<view class="tit1">
+				<view class="address">
+					上西路服务站
+				</view>
+				<view class="address1">
+					台州市椒江区商海北街381号
+				</view>
+				<view class="address3">
+					<image src="../../static/img/img71.png" class="icon-address"></image>
+					<view class="distance">
+						距您14.5km
+					</view>
+					<view class="border"></view>
+					<view class="see">
+						查看地图 >
+					</view>
+				</view>
+			</view>
+		  <view class="tit2">
+		  	<view class="tit2-left">
+		  		提货人
+		  	</view>
+				<view class="tit2-left2">
+					韩大力
+				</view>
+				<view class="tit2-right">
+					 <label class="radio" @click="sex=1"><radio  :checked="sex==1" color='#119327'style="transform:scale(0.7)" />先生</label>
+					  <label class="radio margin-left" @click="sex=0"><radio :checked="sex==0"  color='#119327'style="transform:scale(0.7)"  />女士</label>
+				</view>
+		  </view>
+		   <view class="tit3">
+		   	<view class="number">
+		   		手机号
+		   	</view>
+				<view class="phone-number">
+					13896969696
+				</view>
+		   </view>
+		</view>
+	  
+		<view class="time-box">
+			<view class="time-top flex">
+				<view class="service">
+					送达时间
+				</view>
+				<view class="explain">
+					拼团结束后8小时后到货
+				</view>
+			</view>
+			<view class="time-center flex">
+				<view class="center-left">
+					<image src="/static/img/img52.png" class="shop-img"></image>
+					<image src="/static/img/img52.png" class="aatuan"></image>
+				</view>
+				<view class="center-center flex">
+					<view class="center-left">
+						<view class="center-tit">
+							洋鸡蛋10枚490g
+						</view>
+						<view class="center-number">
+							10枚
+						</view>
+						<view class="over-right">
+							<view>截单倒计时</view>
+							<uni-countdown
+								color="#ffffff"
+								background-color="#FF0000"
+								show-colon
+								:show-day="false"
+								:hour="seckillObj.stopTimeH"
+								:minute="seckillObj.stopTimeM"
+								:second="seckillObj.stopTimeS"
+							></uni-countdown>
+						</view>
+					</view>
+				  <view class="center-right">
+				  	<view class="right-pic">
+				  		<text class="pic-b">¥1.9</text><text>/份</text>
+				  	</view>
+						<view class="right-pic2">
+							¥ 9.9
+						</view>
+						<view class="right-number">
+							x1
+						</view>
+				  </view>
+				</view>
+			</view>
+		</view>
+	  
+		<view class="discount-box">
+			<view class="flex">
+				<view >
+					商品总额
+				</view>
+				<view >
+					¥9.9
+				</view>
+			</view>
+			<view class="flex">
+				<view >
+					配送费
+				</view>
+				<view >
+					+ ¥0
+				</view>
+			</view>
+			<view class="flex">
+				<view >
+					团购优惠金额
+				</view>
+				<view class="red-color">
+					- ¥8
+				</view>
+			</view>
+		</view>
+	   
+		 <view class="agreement">
+		 	<label class="radio">
+		 		<radio :checked='ischeck' @click="changecheck()"   style="transform:scale(0.7)" color="#018D25" value="" /><text>同意</text><text class="text_color">《用户自提服务协议》</text>
+		 	</label>
+		 </view>
+		 
+		 <view class="bottom-box">
+	
+			
+			<view class="pay">
+				立即支付
+			</view>
+			
+			<view class="mony">
+				¥1.9
+			</view>
+			<view class="content">
+				待支付:
+			</view>
+		 </view>
+	</view>
+</template>
+
+<script>
+	export default{
+		data(){
+			return{
+				sex:1,
+				ischeck:true,//是否选中
+				// 秒杀数据保存
+				seckillObj: {
+					stopTime: 0, //结束时间
+					stop: false, //是否结束
+					stopTimeH: 0, //小时
+					stopTimeM: 0, //分钟
+					stopTimeS: 0 //秒钟
+				},
+				// 拼团数据保存
+			}
+		},
+		methods:{
+			//选中
+			changecheck(){
+				console.log(this.ischeck);
+				this.ischeck = !this.ischeck;
+			},
+			  radioChange: function(evt) {
+			            for (let i = 0; i < this.items.length; i++) {
+			                if (this.items[i].value === evt.target.value) {
+			                    this.current = i;
+			                    break;
+			                }
+			            }
+			        }
+		}
+	}
+</script>
+
+<style lang="scss">
+	.container{
+		padding-bottom: 110rpx;
+		.top{
+			width:750rpx;
+			height:454rpx;
+			background:linear-gradient(180deg,rgba(49,193,59,0.93) 65%,rgba(255,255,255,0) 100%);
+		}
+		.content-box{
+			width:705rpx;
+			// height:419rpx;
+			background:rgba(255,255,255,1);
+			border-radius:20rpx;
+			margin: - 280rpx auto 0;
+		  .tit{
+				text-align: center;
+				line-height:70rpx;
+				background:rgba(218,250,209,1);
+				border-radius:20rpx 20rpx 0 0 ;
+				font-size:37rpx;
+				font-weight:bold;
+				color:rgba(0,0,0,1);
+			}
+			.tit1{
+				border-bottom: 1px solid rgba(236,236,236,1);
+				margin: 0 6rpx 0 20rpx;
+				.address{
+					margin-top: 30rpx;
+					margin-bottom: 14rpx;
+					font-size:33rpx;
+					font-weight:bold;
+					color:rgba(0,0,0,1);
+				}
+				.address1{
+					font-size:25rpx;
+					font-weight:bold;
+					color:rgba(155,155,155,1);
+				}
+				.address3{
+					display: flex;
+					align-items: center;
+					margin: 23rpx 0 29rpx 0;
+					.icon-address{
+						width: 22rpx;
+						height: 27rpx;
+						margin-right: 13rpx;
+					}
+					.distance{
+						font-size:24rpx;
+						font-weight:bold;
+						color:rgba(17,147,39,1);
+						margin-right: 18rpx;
+					}
+					.border{
+						width:2rpx;
+						height:20rpx;
+						background:rgba(169,169,169,1);
+						margin-right: 18rpx;
+					}
+					.see{
+						font-size:25rpx;
+						font-weight:bold;
+						color:rgba(155,155,155,1);
+					}
+				}
+			}
+			.tit2{
+				border-bottom: 1px solid rgba(236,236,236,1);
+				display: flex;
+				justify-content: space-between;
+				align-items: center;
+				height: 86rpx;
+				margin: 0 6rpx 0 20rpx;
+				.tit2-left{
+					margin-right: 20rpx;
+					font-size:26rpx;
+					font-weight:bold;
+					color:rgba(0,0,0,1);
+				}
+				.tit2-left2{
+					flex: 1;
+					font-size:26rpx;
+					font-weight:bold;
+				}
+				.tit2-right{
+					display: flex;
+					align-items: center;
+					font-size:27rpx;
+					font-weight:400;
+					color:rgba(0,0,0,1);
+					margin-right: 37rpx;
+					
+				}
+			}
+			.tit3{
+				display: flex;
+				align-items: center;
+				height: 87rpx;
+				font-size:26rpx;
+				font-weight:bold;
+				color:rgba(0,0,0,1);
+				margin: 0 6rpx 0 20rpx;
+				.number{
+					margin-right: 20rpx;
+				}
+			}
+		}
+    
+		.time-box{
+			width:705rpx;
+			background:rgba(255,255,255,1);
+			border-radius:20rpx;
+			margin: 15rpx auto 33rpx;
+			.time-top{
+				height: 85rpx;
+				margin-left: 20rpx;
+				margin-right: 5rpx;
+				padding-right: 13rpx;
+				border-bottom: 1px solid rgba(236,236,236,1);
+				.service{
+					font-size:27rpx;
+					font-weight:400;
+					color:rgba(103,103,103,1);
+				}
+				.explain{
+					font-size:24rpx;
+					font-weight:bold;
+					color:rgba(0,140,31,1);
+				}
+			}
+			.time-center{
+				margin: 5rpx 23rpx;
+				.center-left{
+					width: 169rpx;
+					height: 169rpx;
+						position: relative;
+						margin-right: 16rpx;
+					.shop-img{
+						width: 100%;
+						height: 100%;
+					}
+					.aatuan{
+						width: 83rpx;
+						height: 34rpx;
+						position: absolute;
+						top: 0;
+						left: 0;
+					}
+				}
+				.center-center{
+					flex:1;
+					.center-left{
+						flex: 1;
+						.center-tit{
+							margin-top: 20rpx;
+							margin-bottom: 10rpx;
+							font-size:27rpx;
+							font-weight:bold;
+							color:rgba(0,0,0,1);
+						}
+						.center-number{
+							font-size:23rpx;
+							font-weight:bold;
+							color:rgba(126,126,134,1);
+							margin-bottom: 15rpx;
+						}
+						.over-right{
+							display: flex;
+							align-items: center;
+							font-size:29rpx;
+							font-weight:bold;
+							color:rgba(255,0,0,1);
+						}
+					}
+					.center-right{
+						text-align: right;
+						.right-pic{
+							font-size:23rpx;
+							font-weight:bold;
+							color:rgba(136,139,145,1);
+							margin-bottom: 15rpx;
+							.pic-b{
+								font-size:27rpx;
+								font-weight:bold;
+								color:rgba(0,0,0,1);
+							}
+						}
+						.right-pic2{
+							font-size:23rpx;
+							font-weight:bold;
+							text-decoration:line-through;
+							color:rgba(136,139,145,1);
+						}
+						.right-number{
+							font-size:24rpx;
+							font-weight:bold;
+							color:rgba(136,139,145,1);
+						}
+					}
+				}
+			}
+		}
+	
+	  .discount-box{
+			width:705rpx;
+		
+			background:rgba(255,255,255,1);
+			border-radius:20rpx;
+			margin: 0 auto 38rpx;
+			padding: 33rpx 20rpx;
+			font-size:26rpx;
+			font-weight:bold;
+			color:rgba(0,0,0,1);
+			line-height: 50rpx;
+			.red-color{
+				color:rgba(255,0,0,1);
+			}
+		}
+	
+	.radio{
+		font-size:21rpx;
+		font-weight:bold;
+		color:rgba(97,97,97,1);
+		margin-left: 23rpx;
+		.text_color{
+			color:rgba(1,141,37,1);
+		}
+	}
+	
+	.bottom-box{
+		position: fixed;
+		bottom: 0;
+		padding-right: 18rpx;
+		width:750rpx;
+		height:109rpx;
+		background:rgba(255,255,255,1);
+		border:2rpx solid rgba(133, 133, 133, 0.08);
+		display: flex;
+		align-items: center;
+		flex-direction:row-reverse;
+		.content{
+			font-size:27rpx;
+			font-weight:bold;
+			color:rgba(0,0,0,1);
+		}
+		.mony{
+			font-size:34rpx;
+			font-weight:400;
+			color:rgba(255,0,0,1);
+		}
+		.pay{
+			background:linear-gradient(90deg,rgba(255,83,37,1) 0%,rgba(255,34,41,1) 100%);
+			border-radius:39rpx;
+			font-size:28rpx;
+			font-weight:400;
+			color:rgba(255,255,255,1);
+			padding: 14rpx 52rpx;
+			margin-left: 22rpx;
+		}
+	}
+	}
+</style>

+ 24 - 0
pages/groupBooking/video.vue

@@ -0,0 +1,24 @@
+<template>
+	<view class="container">
+		<video class="video" src="http://shicai.liuniu946.com/img/jiaocheng.mp4"></video>
+	</view>
+</template>
+
+<script>
+</script>
+
+<style lang="scss">
+.container {
+	width: 100%;
+	/* #ifdef H5 */
+	height: calc( 100vh - 44px);
+	/* #endif */
+	/* #ifdef MP */
+	height: 100vh;
+	/* #endif */
+	.video {
+		width: 100%;
+		height: 100%;
+	}
+}
+</style>

+ 436 - 0
pages/index/address.vue

@@ -0,0 +1,436 @@
+<template>
+	<view class="container">
+		<!-- <view class="search-box flex">
+			<view class="address flex">
+				<view class="address-text">椒江区</view>
+				<view class="img"><image src="/static/img/img49.png"></image></view>
+			</view>
+			<view class="input-box">
+				<input placeholder="默认关键字" placeholder-style="color:#c0c0c0;" @click="toSearch" />
+				<view class="icon search"></view>
+			</view>
+		</view> -->
+		<view class="address-title">若您现在所处位置即可收货</view>
+		<view class="choice-section">
+			<!-- <view v-for="(item, index) in choice" :key="index" class="choice-item" @click="change(item)">
+				<text class="title clamp">{{ item.text }}</text>
+			</view> -->
+			<!-- <navigator url="/pages/address/addressManage"> -->
+				<view @click="getLocation"  class="add-buttom">快捷登录(无需填写)</view>
+			<!-- </navigator> -->
+		</view>
+		<view class="address-title flex">
+			<navigator url="/pages/index/index"><div>我的收货地址</div></navigator>
+			<navigator url="/pages/address/addressManage"><div class="newAddress">新增地址</div></navigator>
+		</view>
+		<view class="address-list position-relative" v-for="item in list" @click="changeAddress(item)">
+			<view class="list-tpl clamp">{{ item.detail }}</view>
+			<view class="list-text clamp">
+				{{ item.real_name }}
+				<text>{{ item.phone }}</text>
+			</view>
+			<view class="list-right">
+				<p>
+				点击
+				</p>
+				<p class='margin-t-10'>
+				进入
+				</p>
+			</view>
+		</view>
+		<view class="address-list" v-if="list.length == 0">
+			<view class="nullAddressBOx" @click="getLocation">点击获取地址</view>
+		</view>
+		<view class="Mask" v-show="AdressShow">
+			<image v-show="Show1" mode="widthFix" src="http://shicai.liuniu946.com/static/img/img45.png"></image>
+			<image v-show="Show2" mode="widthFix" src="http://shicai.liuniu946.com/static/img/img42.png"></image>
+			<image v-show="Show3" mode="widthFix" src="http://shicai.liuniu946.com/static/img/img43.png"></image>
+			<image v-show="Show4" mode="widthFix" src="http://shicai.liuniu946.com/static/img/img46.png"></image>
+			<view class="cancel" @click="cancel"><image src="http://shicai.liuniu946.com/static/img/img58.png"></image></view>
+		</view>
+	</view>
+</template>
+
+<script>
+import { getAddressInfo, getAddressList, setAddressDefault, addressEdit,check_address } from '@/api/address.js';
+import { mapMutations, mapState } from 'vuex';
+// #ifdef MP
+import { openMap } from '@/utils/rocessor.js';
+// #endif
+export default {
+	computed: {
+		...mapState(['addressPageShow'])
+	},
+	data() {
+		return {
+			AdressShow:false,//地址范围
+			Show1:'',//显示椒江地图
+			Show2:'',//显示路桥地图
+			Show3:'',//显示黄岩地图
+			choice: [
+				{
+					id: '0',
+					text: '椒江'
+				},
+				{
+					id: '1',
+					text: '椒江2'
+				},
+				{
+					id: '2',
+					text: '路桥'
+				},
+				{
+					id: '3',
+					text: '黄岩'
+				}
+			],
+			// 当前选中的对象
+			checkid: 0,
+			list: []
+		};
+	},
+	onLoad() {
+		// 判断是否有地址信息
+		let address = uni.getStorageSync('addressData') || '';
+		// 判断是否有缓存
+		if (address.id && !this.addressPageShow) {
+			this.setAddressData(address);
+			uni.switchTab({
+				url: '/pages/index/index'
+			});
+		}
+		// 加载地址列表
+		this.getAddressList();
+	},
+	methods: {
+		...mapMutations(['setAddressData']),
+		// 修改确认地址
+		changeAddress(item) {
+			console.log(item)
+			let obj = this;
+			check_address({
+				address_id:item.id
+			}).then(({data}) => {
+					if(data.shop == -1){
+						obj.$api.msg('地址在配送范围外,请重新选择地址');
+						return;
+					}
+					if(data.shop > 0){
+						// 保存当前地址信息
+						this.setAddressData(item);
+						// 设置当前地址为默认地址
+						setAddressDefault({
+							id: item.id
+						})
+							.then(e => {
+								console.log(e);
+							})
+							.catch(e => {
+								console.log(e);
+							});
+						uni.switchTab({
+							url: '/pages/index/index'
+						});
+					}
+				})
+				.catch(e => {
+					console.log(e);
+				});
+		},
+		// 获取地址列表
+		getAddressList() {
+			let obj = this;
+			getAddressList({})
+				.then(({ data }) => {
+					obj.list = data;
+				})
+				.catch(e => {
+					console.log(e);
+				});
+		},
+		// 获取当前位置
+		getLocation() {
+			const obj = this;
+			// #ifdef MP
+			openMap().then(() => {
+				uni.getLocation({
+					type: 'gcj02',
+					success(e) {
+						uni.chooseLocation({
+							latitude: e.latitude,
+							longitude: e.longitude,
+							success(e) {
+								obj.addressEdit(e);
+							}
+						});
+					}
+				});
+			}).catch((e) => {
+				uni.showModal({
+					title: '提示',
+					content: '您未授权无法调用地图定位功能!',
+					showCancel: false,
+				});
+			})
+			// #endif
+		},
+		// 查询地址名称
+		toSearch(e) {
+			document.getElementById().innerHTML;
+		},
+		// 获取当前位置地址信息
+		addressEdit(address) {
+			let district = '椒江区'
+			if(address.address.indexOf('椒江区')>-1){
+				district = '椒江区'
+			}
+			if(address.address.indexOf('路桥区')>-1){
+				district = '路桥区'
+			}
+			if(address.address.indexOf('黄岩区')>-1){
+				district = '黄岩区'
+			}
+			let obj = this;
+			let data = this.addressData;
+			const userInfo = uni.getStorageSync('userInfo');
+			console.log(userInfo,'userInfo');
+			if(!userInfo.phone){
+				uni.showModal({
+				    title: '提示',
+				    content: '是否绑定手机号?',
+				    success: function (res) {
+				        if (res.confirm) {
+				            uni.navigateTo({
+				            	url: '/pages/set/phone'
+				            });
+				        } else if (res.cancel) {
+				           uni.switchTab({
+				           	url: '/pages/index/index'
+				           });
+				        }
+				    }
+				});
+				return;
+			}else{
+				addressEdit({
+					real_name: userInfo.nickname,
+					phone: userInfo.phone,
+					address: {
+						province: '浙江省',
+						city: '台州市',
+						district: district
+					},
+					longitude: address.longitude,
+					latitude: address.latitude,
+					detail: address.name,
+					is_default: 1
+				}).then(function(e) {
+					obj.getAddressList();
+				}).catch((e) => {
+					console.log(e);
+				});
+			}
+		},
+		//商品种类切换
+		change(item) {
+			let id = item.id;
+			this.checkid = id;
+			console.log(this.checkid)
+			this.AdressShow = true;
+			if(this.checkid == 0){
+				this.Show1 = true
+			}
+			if(this.checkid == 1){
+				this.Show2 = true
+			}
+			if(this.checkid == 2){
+				this.Show3 = true
+			}
+			if(this.checkid == 3){
+				this.Show4 = true
+			}
+		},
+		cancel(){
+			this.AdressShow = false;
+			this.Show1 = false;
+			this.Show2 = false;
+			this.Show3 = false;
+			this.Show4 = false;
+		},
+		//添加或修改成功之后回调
+		refreshList() {
+			// 重新加载地址
+			this.getAddressList();
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+.nullAddressBOx {
+	padding: 20rpx;
+	text-align: center;
+	font-size: 32rpx;
+	color: $base-color;
+}
+
+page {
+	width: 100%;
+	height: 100%;
+	.container {
+		width: 100%;
+		height: 100%;
+	}
+}
+.search-box {
+	padding: 25rpx 25rpx;
+	background: #ffffff;
+	.address {
+		font-size: 28rpx;
+		.img {
+			width: 20rpx;
+			height: 20rpx;
+			margin-bottom: 10rpx;
+			image {
+				width: 100%;
+				height: 100%;
+			}
+		}
+		.address-text {
+			padding-right: 10rpx;
+		}
+	}
+	.input-box {
+		width: 80%;
+		margin: 0rpx auto;
+		height: 70rpx;
+		background-color: #f5f5f5;
+		border-radius: 50rpx;
+		position: relative;
+		display: flex;
+		align-items: center;
+		.icon {
+			display: flex;
+			align-items: center;
+			position: absolute;
+			top: 0;
+			right: 0;
+			width: 60rpx;
+			height: 80rpx;
+			font-size: 34rpx;
+			color: $font-color-disabled;
+		}
+		input {
+			padding-left: 28rpx;
+			height: 28rpx;
+			font-size: 28rpx;
+		}
+	}
+}
+.address-title {
+	color: $font-color-dark;
+	font-size: 32rpx;
+	padding: 30rpx 25rpx;
+	.newAddress {
+		color: $base-color;
+	}
+}
+.Mask {
+	width: 100%;
+	height: 100vh;
+	position: fixed;
+	z-index: 99999;
+	background-color: rgba(0, 0, 0, 0.7);
+	top: 0;
+	padding-top: 25%;
+	image {
+		width: 100%;
+		height: auto;
+	}
+}
+.cancel{
+	width: 100%;
+	height: 100rpx;
+	text-align: center;
+	image{
+		width: 100rpx;
+		height: 100rpx;
+		margin: 50rpx auto;
+	}
+}
+.address-list {
+	background: #ffffff;
+	padding: 25rpx 25rpx;
+	color: $font-color-dark;
+	.list-tpl {
+		font-size: 28rpx;
+		font-weight: bold;
+	}
+	.list-tip {
+		font-size: 24rpx;
+		padding: 15rpx 0rpx;
+	}
+	.list-text {
+		color: $font-color-light;
+		font-size: 24rpx;
+		padding: 15rpx 0rpx;
+	}
+	.list-right {
+		position: absolute;
+		right: 20rpx;
+		top: 30rpx;
+		padding: 10rpx 20rpx;
+		background-color: #e6ffee ;
+		border: 2rpx solid #2dbd59 ;
+		font-size: 28rpx;
+		color: #2dbd59;
+		line-height: 1;
+		border-radius: 10rpx;
+	}
+}
+.border {
+	border-bottom: 2rpx solid #f0f0f0;
+}
+//商品分类
+.choice-section {
+	display: flex;
+	flex-wrap: wrap;
+	justify-content: center;
+	padding-left: 40rpx;
+	font-size: 28rpx;
+	background: #ffffff;
+	padding: 25rpx 25rpx;
+	// padding-bottom: 0rpx;
+	padding-right: 0rpx;
+	.add-buttom{
+		padding: 10rpx 40rpx;
+		background-color: #1AC838;
+		color: #FFFFFF;
+		border-radius:10px;
+		font-size:32rpx;
+	}
+	.choice-item {
+		overflow: hidden;
+		display: flex;
+		flex-direction: column;
+		color: $base-color;
+		border: 2rpx solid $base-color;
+		&:nth-child(n + 1) {
+			margin-right: 4%;
+		}
+		border-radius: 15rpx;
+		margin-bottom: 25rpx;
+	}
+	.title {
+		padding: 10rpx 30rpx;
+		border-radius: 15rpx;
+		font-size: 28rpx;
+		font-weight: bold;
+	}
+	.active {
+		background: $base-color;
+		color: #ffffff;
+	}
+}
+</style>

+ 2031 - 0
pages/index/index.vue

@@ -0,0 +1,2031 @@
+<template>
+	<view class="container">
+		<view class="top_header" :style="{ background: header_color }">
+			<!-- 顶部导航栏 -->
+			<view class="top-address" :style="{ backgroundColor: 'rgba(255,255,255,' + navP + ')' }">
+				<view class="header flex">
+					<!-- 定位城市 -->
+					<view class="addr" @click="Toaddress" :style="{ color: addr_color }">
+						<view class="icon location" :style="{ color: addr_color }"></view>
+						<view class="clamp">{{ (addressData.detail || '请选择地址') | filterAddress }}</view>
+					</view>
+					<!-- 右侧图标按钮 -->
+					<view class="time-box" :style="{ color: addr_color }" >
+						<view class="timeText">营业时间:{{ workstarTime }} - {{ workendTime }},商城满19包邮到家(拼团自提)</view>
+					</view>
+					<!-- <uni-notice-bar scrollable="true" single="true" text=""></uni-notice-bar> -->
+				</view>
+				<view class="input-box" @tap="clickSearch()">
+					<input placeholder="默认关键字" placeholder-style="color:#c0c0c0;" />
+					<view class="icon search"></view>
+				</view>
+			</view>
+			<view class="zhanwei"></view>
+			<view class="text-box flex" @click="Toreturned">
+				<view v-for="ls in Textlist" class="text-center flex_item" :style="{ backgroundColor: Textlist_color }">
+					<view class="img"><image :src="ls.img"></image></view>
+					<view class="text">{{ ls.text }}</view>
+				</view>
+			</view>
+			<view class="swiper">
+				<view class="swiper-box">
+					<swiper circular="true" autoplay="true" @change="swiperChange">
+						<swiper-item v-for="swiper in carouselList" @click="bannerNavToUrl(swiper)"><image :src="swiper.pic"></image></swiper-item>
+					</swiper>
+					<view class="indicator"><view class="dots" v-for="(swiper, index) in carouselList" :class="[swiperCurrent >= index ? 'on' : '']"></view></view>
+				</view>
+			</view>
+		</view>
+		<view class="Make-group" @click="ToGroup()">
+			<view class="group-title flex">
+				<view class="title">邻里拼团</view>
+				<view class="tip">|</view>
+				<view class="tpl">10:00 ~ 22:00 准时开抢</view>
+				<view>
+					<view class="detail">
+						<text>立即抢购</text>
+						<text style="font-size: 32rpx;" class="iconfont iconenter"></text>
+					</view>
+				</view>
+			</view>
+			<view class="floor-list">
+				<gbro-marquee :groupBookingList='groupBookingList' ref='pinkGoodsBox' broadcastType="mould" :viewHeight="190" direction="left" :broadcastStyle="broadcastStyle" style="width: 100%">
+					
+				</gbro-marquee>
+			</view>
+		</view>
+		
+		<!-- 产品接龙 -->
+		<view class="solitaire flex" @click="ToKlon">
+			<view class="flex_item">
+				<view class="Member-box"><image src="/static/img/img20.png"></image></view>
+				<view class="Member-text">预售产品,发起接龙抢先购买</view>
+			</view>
+			<view class="Member-code">
+				点击进入
+				<text class="iconfont iconenter"></text>
+			</view>
+		</view>
+		
+		<view class="content"><image :src="image" @click="navTo('/pages/notice/poster?id=3')"></image></view>
+		
+		<!-- 商品分类 -->
+		<view class="category-section">
+			<view class="category-item" @click="ToCategory(18)">
+				<view class="image-wrapper"><image src="http://shicai.liuniu946.com/static/img/img25.png"></image></view>
+				<text class="title clamp">每日蔬菜</text>
+			</view>
+			<view class="category-item" @click="ToCategory(6)">
+				<view class="image-wrapper"><image src="http://shicai.liuniu946.com/static/img/img26.png"></image></view>
+				<text class="title clamp">肉类禽类</text>
+			</view>
+			<view class="category-item" @click="ToCategory(1)">
+				<view class="image-wrapper"><image src="http://shicai.liuniu946.com/static/img/img27.png"></image></view>
+				<text class="title clamp">海鲜水产</text>
+			</view>
+			<view class="category-item" @click="ToCategory(44)">
+				<view class="image-wrapper"><image src="http://shicai.liuniu946.com/static/img/img28.png" mode="scaleToFill"></image></view>
+				<text class="title clamp">面点豆腐</text>
+			</view>
+			<view class="category-item" @click="ToCategory(34)">
+				<view class="image-wrapper"><image src="http://shicai.liuniu946.com/static/img/img29.png" mode="scaleToFill"></image></view>
+				<text class="title clamp">家庭常用</text>
+			</view>
+			<view class="category-item" @click="ToCategory(33)">
+				<view class="image-wrapper"><image src="http://shicai.liuniu946.com/static/img/img30.png" mode="scaleToFill"></image></view>
+				<text class="title clamp">快捷早餐</text>
+			</view>
+			<view class="category-item" @click="ToCategory(25)">
+				<view class="image-wrapper"><image src="http://shicai.liuniu946.com/static/img/img31.png" mode="scaleToFill"></image></view>
+				<text class="title clamp">方便速食</text>
+			</view>
+			<view class="category-item" @click="ToCategory(47)">
+				<view class="image-wrapper"><image src="http://shicai.liuniu946.com/static/img/img32.png" mode="scaleToFill"></image></view>
+				<text class="title clamp">有机蔬菜</text>
+			</view>
+			<view class="category-item" @click="ToCategory(48)">
+				<view class="image-wrapper"><image src="http://shicai.liuniu946.com/static/img/img33.png" mode="scaleToFill"></image></view>
+				<text class="title clamp">分享有礼</text>
+			</view>
+			<view class="category-item" @click="ToCategory(49)">
+				<view class="image-wrapper"><image src="http://shicai.liuniu946.com/static/img/img34.png" mode="scaleToFill"></image></view>
+				<text class="title clamp">联系客服</text>
+			</view>
+		</view>
+		<!-- 开通美卡 -->
+		<!-- <view class="Member flex" @click="Tomember">
+			<view class="flex_item">
+				<view class="Member-box"><image src="/static/img/img20.png"></image></view>
+				<view class="Member-text">开通美卡,平均可省1588元/年</view>
+			</view>
+			<view class="Member-code">
+				5折开卡
+				<text class="iconfont iconenter"></text>
+			</view>
+		</view> -->
+		<!-- 秒杀楼层 -->
+		<!-- <view class="seckill-section m-t">
+			<view class="s-header">
+				<view class="f-left-icon"></view>
+				<view class="tit-box"><text class="tit">限时秒杀</text></view>
+				<view class="tip-box">
+					<text class="tip" v-if="status == 1">{{ showTime }}点场结束</text>
+					<text class="tip" v-if="status == 2">距离下场开始</text>
+					<text class="tip" v-if="status == 0">当天活动已结束</text>
+					<uni-countdown v-if="status == 1 || status == 2" :show-day="false" :hour="stopTimeH" color="#F9F9F8" background-color="#666666" :minute="stopTimeM" :second="stopTimeS"></uni-countdown>
+				</view>
+				<view class="textNav iconfont iconenter" @click="navTo('/pages/seckill/seckill')">更多</view>
+			</view>
+			<scroll-view class="floor-list" scroll-x>
+				<view class="scoll-wrapper position-relative" @click="navTo('/pages/seckill/seckill')">
+					<view v-for="(item, index) in list" :key="index" class="floor-item">
+						<image class="list-image" :src="item.image" mode="aspectFill"></image>
+						<text class="title clamp">{{ item.title }}</text>
+						<text class="price">¥{{ item.price }}</text>
+					</view>
+					<view v-if="list.length == 0" class="floor-item ">
+						<image class="list-image" mode="aspectFill"></image>
+						<text class="title clamp"></text>
+						<text class="price"></text>
+					</view>
+					<view v-if="list.length == 0" class="noGoodsBg"><view>敬请期待</view></view>
+				</view>
+			</scroll-view>
+		</view> -->
+		<!-- 今日爆款 -->
+		<view class="seckill-section m-t">
+			<view class="s-header">
+				<view class="f-left-icon"></view>
+				<view class="tit-box"><text class="tit">今日秒杀</text></view>
+				<view class="tip-box">
+					<view class="time flex_item">
+						<view class="flex_item time-box" v-show="starting">
+							<uni-countdown
+								color="#FFFFFF"
+								background-color="#334432"
+								:show-day="false"
+								:hour="starthour"
+								:minute="startminute"
+								:second="startsecond"
+							></uni-countdown>
+						</view>
+						<view class="flex_item time-box" v-show="Timeing">
+							<uni-countdown
+								color="#FFFFFF"
+								background-color="#334432"
+								:show-day="false"
+								:hour="Timeinghour"
+								:minute="Timeingminute"
+								:second="Timeingsecond"
+							></uni-countdown>
+						</view>
+						<view class="flex_item  " v-show="end">
+							<uni-countdown color="#FFFFFF" background-color="#334432" :show-day="false" :hour="endhour" :minute="endminute" :second="endsecond"></uni-countdown>
+						</view>
+					</view>
+				</view>
+				<view class="textNav" @click="ToSeckill">更多</view>
+			</view>
+			<scroll-view class="floor-list" scroll-x>
+				<view class="scoll-wrapper position-relative" @click="ToSeckill">
+					<view v-for="(item, index) in Productslist" :key="index" class="floor-item">
+						<image class="list-image" :src="item.image"></image>
+						<view class="tpl">
+							<view class="title clamp">{{ item.store_name }}</view>
+							<view class="flex">
+								<view class="">
+									<view class="price">¥{{ item.price }}</view>
+									<view class="otPrice">¥{{ item.ot_price }}</view>
+								</view>
+								<view class="img position-relative" @click.stop="Addcar(item, 2)">
+									<image src="/static/img/img21.png"></image>
+									<view class="corner" v-if="item.cart_num > 0">
+										<text>{{ item.cart_num }}</text>
+									</view>
+								</view>
+							</view>
+						</view>
+					</view>
+				</view>
+			</scroll-view>
+		</view>
+		<!-- <view class="transition"></view> -->
+		<!-- 特色专区 --><!-- @click="openSp()" -->
+		<!-- <view class="characteristic">
+			<view class="f-header m-t">
+				<view class="f-left-icon"></view>
+				<view class="tit-box"><text class="tit">特色专区</text></view>
+			</view>
+			<view class="characteristic-box" @click="Category()">
+				<view class="box flex">
+					<view class="characteristic-list">
+						<view class="list-tpl red">本地小菜</view>
+						<view class="list-tip">绿色本地小菜 随心选~</view>
+						<view class="list-img flex">
+							<view class="img"><image src="http://shicai.liuniu946.com/static/img/img03.png"></image></view>
+							<view class="img"><image src="http://shicai.liuniu946.com/static/img/img04.png"></image></view>
+						</view>
+					</view>
+					<view class="characteristic-list">
+						<view class="list-tpl pink">光鸡光鸭</view>
+						<view class="list-tip">优质禽肉 肉嫩鲜香</view>
+						<view class="list-img flex">
+							<view class="img"><image src="http://shicai.liuniu946.com/static/img/img05.png"></image></view>
+							<view class="img"><image src="http://shicai.liuniu946.com/static/img/img06.png"></image></view>
+						</view>
+					</view>
+				</view>
+				<view class="box flex">
+					<view class="characteristic-list">
+						<view class="list-tpl blue">活鱼活虾</view>
+						<view class="list-tip">种类丰富 鲜活到家</view>
+						<view class="list-img flex">
+							<view class="img"><image src="http://shicai.liuniu946.com/static/img/img07.png"></image></view>
+							<view class="img"><image src="http://shicai.liuniu946.com/static/img/img10.png"></image></view>
+						</view>
+					</view>
+					<view class="characteristic-list">
+						<view class="list-tpl green">有机农场</view>
+						<view class="list-tip">基地直采 生态健康</view>
+						<view class="list-img flex">
+							<view class="img"><image src="http://shicai.liuniu946.com/static/img/img09.png"></image></view>
+							<view class="img"><image src="http://shicai.liuniu946.com/static/img/img08.png"></image></view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view> -->
+		<view class="transition"></view>
+		<!-- 商品分类切换卡片 -->
+		<view class="recommend flex">
+			<view class="recommend_list" @click="change(ls.id)" v-for="(ls,index) in recommend" :key='index'>
+				<view class="re_title" v-bind:class="{ active_color: ls.id == checkid }">{{ ls.re_title }}</view>
+				<view class="re_name">
+					<text v-bind:class="{ active_name: ls.id == checkid }">{{ ls.re_name }}</text>
+				</view>
+			</view>
+		</view>
+		<view id="list-box" class="list-box" @change="listChange" :style="{ height: swiperHeight + 'px' }" :current="checkid">
+			<view class="guess-section">
+				<view v-for="(item, index) in detail" class="guess-item" @click="navToDetailPage(item)">
+					<view class="imagewrapper"><image :src="item.image"></image></view>
+					<view class="guess-list">
+						<text class="title clamp">{{ item.store_name }}</text>
+						<view class="info clamp">{{ item.store_info }}</view>
+						<view class="tipBox">
+							<view class="tipsl" v-if="item.keyword != ''">
+								<text v-for="lss in item.keyword">{{ lss }}</text>
+							</view>
+						</view>
+					</view>
+					<view class="price margin-c-20 flex">
+						<view class="price_list">
+							<view class="price-red">
+								¥{{ item.price }}
+								<text>/份</text>
+							</view>
+							<view class="price-green" v-if="item.ot_price">
+								¥{{ item.ot_price }}
+								<text>市场价</text>
+							</view>
+						</view>
+						<view class="img position-relative" @click.stop="Addcar(item)">
+							<image src="/static/img/img21.png"></image>
+							<view class="corner" v-if="item.cart_num > 0">
+								<text>{{ item.cart_num }}</text>
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+		<view class="TipsBox" v-show="ShowAddress" @click="ToAddress">
+			当前地址不在配送范围内,建议您
+			<text>修改地址</text>
+		</view>
+		<!-- <view class="Mask" v-show="MaskShow"><image @click="Mask" src="http://shicai.liuniu946.com/static/img/shareimg3.png"></image></view> -->
+		<view class="Mask" v-show="shareShow">
+			<image @click="share" src="http://shicai.liuniu946.com/static/img/shareimg4.png"></image>
+			<view class="Toshare" @click="Toshare"></view>
+			<view class="Tocancel" @click="Tocancel"></view>
+		</view>
+	</view>
+</template>
+<script>
+import seckill from './seckill';
+import { mapState, mapMutations } from 'vuex';
+import { check_address } from '@/api/address.js';
+import { category_layer } from '@/api/category.js';
+import { getProducts } from '@/api/product.js';
+import { loadIndexs } from '@/api/index.js';
+import { article, details } from '@/api/notice.js';
+import { setCoupons } from '@/api/coupon.js';
+import { cartAdd } from '@/api/product.js';
+import { getUserInfo } from '@/api/login.js';
+import { saveUrl } from '@/utils/loginUtils';
+import uniCountdown from '@/components/uni-countdown/uni-countdown.vue';
+import gbroMarquee from '@/components/gbro-marquee/marquee.vue';
+import { getList, getClass } from '@/api/seckill.js';
+import { share } from '@/api/wx.js';
+import { timeComputed } from '@/utils/rocessor.js';
+import { GetRequest } from '@/utils/rocessor.js';
+// 拼团列表
+// import { getCombinationList } from '@/api/groupBooking.js';
+export default {
+	components: {
+		uniCountdown,
+		gbroMarquee,
+	},
+	filters: {
+		filterAddress: function(value) {
+			let b = value.split(',');
+			// console.log(b);
+			return b[0];
+		},
+		returnNub(value) {
+			return +value;
+		}
+	},
+	onPageScroll(e) {
+		this.navP = e.scrollTop / 200;
+		if (e.scrollTop > 10) {
+			this.addr_color = '#333333';
+		} else {
+			this.addr_color = '#ffffff';
+		}
+	},
+	watch: {
+		//自适应swiper高度
+		checkid(newValue, oldValue) {
+			let obj = this;
+			if (newValue == 0) {
+				let bHeight = Math.ceil(obj.bastList.length / 2);
+				obj.swiperHeight = Math.ceil(obj.pageProportion * 550 * bHeight);
+			}
+			if (newValue == 1) {
+				let bHeight = Math.ceil(obj.benefitList.length / 2);
+ 			}
+			if (newValue == 2) {
+				let bHeight = Math.ceil(obj.firstList.length / 2);
+				
+				obj.swiperHeight = Math.ceil(obj.pageProportion * 500 * bHeight);
+			}
+			if (newValue == 3) {
+				let bHeight = Math.ceil(obj.hotList.length / 2);
+				obj.swiperHeight = Math.ceil(obj.pageProportion * 500 * bHeight);
+			}
+		},
+		// 初次加载页面高度时修改页面高度
+		detail(newValue, oldValue) {
+			let obj = this;
+			let bHeight = Math.ceil(newValue.length / 2);
+			obj.$nextTick(function() {
+				uni.createSelectorQuery()
+					.select('#list-box')
+					.fields(
+						{
+							size: true
+						},
+						function(data) {
+							obj.pageProportion = data.width / 750;
+							obj.swiperHeight = Math.ceil(obj.pageProportion * 550 * bHeight);
+						}
+					)
+					.exec();
+			});
+		}
+	},
+	data() {
+		return {
+			shareShow: false, //分享海报
+			ShowAddress: false, //当地址超出配送范围,显示提示
+			MaskShow: false, //第一次进入小程序出现弹窗
+			navP: 0, // 导航栏透明度
+			addr_color: '#FFFFFF', //导航栏字体颜色
+			header_color: '', //轮播图背景色渐变
+			Textlist_color: '', //送货上门背景色
+			pageProportion: 0, //保存页面基于750宽度的比例
+			swiperHeight: 0,
+			checkid: 0, //商品种类切换
+			swiperCurrent: 0, //轮播图
+			broadcastStyle: {
+				speed: 100 //每秒100px
+			},
+			Textlist: [
+				{
+					img: '/static/img/img05.png',
+					text: '送货上门'
+				},
+				{
+					img: '/static/img/img06.png',
+					text: '放心交易'
+				},
+				{
+					img: '/static/img/img07.png',
+					text: '品质保障'
+				},
+				{
+					img: '/static/img/img08.png',
+					text: '售后无忧'
+				}
+			],
+			CategoryList: [], //商品一级分类
+			Productslist: '', //今日秒杀商品
+			groupBookingList: [], //拼团商品
+			recommend: [
+				{
+					id: 0,
+					re_title: '随便看看',
+					re_name: '猜你喜欢'
+				},
+				{
+					id: 1,
+					re_title: '海鲜大咖',
+					re_name: '本地特色'
+				},
+				{
+					id: 2,
+					re_title: '新货新得',
+					re_name: '新品发布'
+				},
+				{
+					id: 3,
+					re_title: '方便快捷',
+					re_name: '早餐夜宵'
+				}
+			],
+			detail: [], //点击选中的的商品列表
+			carouselList: [], //轮播列表
+			bastList: [], //随便看看
+			benefitList: [], //海鲜大咖
+			firstList: [], //新货新得
+			hotList: [], //方便快捷
+			userServant: [
+				{
+					image: ''
+				}
+			], //用户推广服务
+			couponArray: [], //可领取优惠券
+			// 头部高度
+			barHeight: 0,
+			cid: 3, //文章分类
+			image: '', //海报图片
+			userInfo: '',
+			workstarTime: '', //营业开始时间
+			workendTime: '', //营业结束时间
+			page: 1,
+			limit: 10,
+
+			starting: false, //判断活动未开始
+			end: false, //判断活动结束
+			Timeing: false, //判断活动进行中
+			starthour: 0, //距离今天开始时间
+			startminute: 0,
+			startsecond: 0,
+			Timeinghour: '',
+			Timeingminute: '',
+			Timeingsecond: '',
+			endhour: 0, //距离今天结束时间
+			endminute: 0,
+			endsecond: 0,
+			startime: '9:00:00' //距离开始时间
+		};
+	},
+	computed: {
+		...mapState(['addressData', 'addressPageShow', 'GetInfo']),
+		...mapState('user', ['orderInfo', 'hasLogin'])
+	},
+	onLoad: function(option) {
+		// #ifdef MP
+		// 获取地图权限
+		uni.authorize({
+			scope: 'scope.userLocation',
+			success: res => {}
+		});
+		// #endif
+		if (option.spread) {
+			uni.setStorageSync('spread', option.spread);
+		}
+		if (uni.getStorageSync('FirstEntry') == '' || uni.getStorageSync('FirstEntry') == null) {
+			if (uni.getStorageSync('FirstEntry') == false) {
+				this.MaskShow = true;
+			} else {
+				this.MaskShow = false;
+			}
+		} else {
+			uni.setStorage({
+				key: 'FirstEntry',
+				data: false,
+				success: function() {
+					console.log(uni.getStorageSync('FirstEntry'), 'app');
+				}
+			});
+		}
+		// 保存传值
+		uni.setStorageSync('option', option);
+		if (option.scene) {
+			if (typeof option.scene == 'string' && isNaN(option.scene)) {
+				let da = GetRequest(decodeURIComponent(option.scene));
+				uni.setStorageSync('spread', da.spread);
+			}
+			if (!isNaN(option.scene)) {
+				uni.setStorageSync('spread_code', option.scene);
+			}
+		}
+		saveUrl();
+		// 判断是否有地址信息
+		let address = uni.getStorageSync('addressData') || '';
+		// 判断是否有缓存
+		if (address.id) {
+			this.setAddressData(address);
+		}
+	},
+	onShow: function() {
+		this.userInfo = uni.getStorageSync('userInfo');
+		// 保存传值
+		// this.swiperCurrent = 0;
+		this.loadData();
+		this.GetList();
+		this.GetProducts();
+		this.ArticleDate();
+		this.checkAddress();
+		this.GetShare();
+		//加载拼团价商品
+		// this.getCombinationList();
+		// this.getClass();
+	},
+	onReady() {
+		// 初始化获取页面宽度
+		uni.createSelectorQuery()
+			.select('.top-address')
+			.fields(
+				{
+					size: true
+				},
+				data => {
+					// 获取头部高度
+					this.barHeight = data.height;
+				}
+			)
+			.exec();
+	},
+	//下拉刷新
+	onPullDownRefresh() {
+		let obj = this;
+		//监听下拉刷新动作的执行方法,每次手动下拉刷新都会执行一次
+		setTimeout(function() {
+			obj.loadData();
+			uni.stopPullDownRefresh(); //停止下拉刷新动画
+		}, 1000);
+	},
+	methods: {
+		...mapMutations('user', ['setUserInfo', 'setOrderInfo']),
+		...mapMutations(['setAddressData', 'upAddressPageShow', 'setGetInfo']),
+		// 获取拼团列表
+		// getCombinationList() {
+		// 	// 请求订单
+		// 	getCombinationList({
+		// 		page: 1,
+		// 		limit: 20
+		// 	})
+		// 		.then(e => {
+		// 			this.groupBookingList = e.data;
+		// 		})
+		// 		.catch(e => {});
+		// },
+		//收藏小程序蒙层
+		Mask() {
+			this.MaskShow = false;
+			this.shareShow = true;
+			uni.setStorage({
+				key: 'FirstEntry',
+				data: true,
+				success: function() {
+					console.log(uni.getStorageSync('FirstEntry'), 'Mask');
+				}
+			});
+		},
+		// 扫码查看值
+		openSp() {
+			let obj = this;
+			uni.scanCode({
+				complete(e) {
+					uni.showModal({
+						title: '',
+						content: JSON.stringify(e),
+						showCancel: false,
+						complete() {
+							if(obj.erros){
+							uni.showModal({
+								title: '错误',
+								content:JSON.stringify(obj.erros),
+								showCancel: false
+							});
+							}
+						}
+					});
+				}
+			});
+		},
+		
+		//检查地址是否在配送区域
+		checkAddress() {
+			let obj = this;
+			check_address({
+				address_id: obj.addressData.id
+			})
+				.then(({ data }) => {
+					if (data.shop == -1) {
+						obj.ShowAddress = true;
+					}
+					// if(data.shop == 0){
+					// 	obj.$api.msg('请选择配送地址');
+					// }
+				})
+				.catch(e => {
+					console.log(e);
+				});
+		},
+		//分享信息
+		GetShare() {
+			let obj = this;
+			share({})
+				.then(({ data }) => {
+					obj.setGetInfo(data.data);
+				})
+				.catch(err => {
+					console.log(err);
+				});
+		},
+		//当地址不在配送范围内,跳转到选择地址页面
+		ToAddress() {
+			if (!this.addressPageShow) {
+				this.upAddressPageShow();
+			}
+			uni.navigateTo({
+				url: '/pages/index/address'
+			});
+		},
+		//菜佬优惠日
+		async ArticleDate() {
+			let obj = this;
+			article({}, obj.cid).then(function({ data }) {
+				obj.image = data[0].image_input[0];
+			});
+		},
+		// 获取商品分类
+		async GetList() {
+			let obj = this;
+			category_layer({})
+				.then(({ data }) => {
+					this.CategoryList = data.list;
+				})
+				.catch(err => {
+					console.log(err);
+				});
+		},
+		// 请求今日秒杀商品
+		GetProducts() {
+			let obj = this;
+			getProducts({
+				type: 1,
+				sid: 100 //分类id
+			})
+				.then(({ data }) => {
+					obj.Productslist = data;
+				})
+				.catch(err => {
+					console.log(err);
+				});
+		},
+		//分享
+		// #ifdef MP
+		onShareAppMessage: function(res) {
+			console.log(this.GetInfo);
+			// 来自页面内分享按钮
+			let pages = getCurrentPages();
+			// 获取当前页面
+			let page = pages[pages.length - 1];
+			let path = '/pages/index/index?';
+			// 保存邀请人
+			path += 'spread=' + this.userInfo.uid;
+			let data = {
+				path: path,
+				imageUrl: this.GetInfo.img,
+				title: this.GetInfo.title
+			};
+			console.log(data);
+			return data;
+		},
+		// #endif
+		//加入购物车
+		Addcar(item, type) {
+			let obj = this;
+			cartAdd({
+				cartNum: '1', //商品数量
+				uniqueId: '', //商品标签
+				new: 0, //商品是否新增加到购物车1为不加入0为加入
+				mer_id: '',
+				productId: item.id //商品编号
+			})
+				.then(function(e) {
+					uni.showToast({
+						title: '成功加入购物车',
+						type: 'top',
+						duration: 500,
+						icon: 'none'
+					});
+					if (type == 2) {
+						obj.GetProducts();
+					} else {
+						obj.loadData();
+					}
+				})
+				.catch(e => {
+					console.log(e);
+				});
+		},
+		// 请求商品列表
+		async loadData() {
+			let obj = this;
+			loadIndexs({})
+				.then(({ data }) => {
+					try {
+						let goods = data.info;
+						obj.carouselList = data.banner;
+						let color = obj.carouselList[obj.swiperCurrent].color;
+						obj.header_color = 'linear-gradient(0deg, rgba(255, 255, 255, 1) 0%, ' + color + '100%) ';
+						obj.Textlist_color = color;
+						obj.bastList = goods.bastList;
+						obj.benefitList = goods.benefitList;
+						obj.firstList = goods.firstList;
+						obj.hotList = goods.hotList;
+						obj.detail = obj.bastList;
+						let arr = data.sell_time.split(',');
+						obj.workstarTime = arr[0];
+						obj.workendTime = arr[1];
+						// 保存拼团商品信息
+						obj.groupBookingList = data.latestPink;
+						obj.$nextTick(function(){
+							obj.getPinkTimeBoxWidth()
+						})
+						console.log(obj.groupBookingList);
+						obj.StartDate();
+						obj.GetDate();
+					} catch (e) {
+						console.log(e);
+					}
+					uni.stopPullDownRefresh();
+				})
+				.catch(e => {
+					uni.stopPullDownRefresh();
+				});
+		},
+		getPinkTimeBoxWidth(){
+			this.$refs.pinkGoodsBox.getBoxWidth()
+		},
+		
+		// 跳转接龙页面
+		ToKlon() {
+			if( this.userInfo.is_promoter == 0 ) {
+				uni.showToast({
+					title: '请先成为团长!',
+					type: 'top',
+					duration: 500,
+					icon: 'none',
+					success() {
+						uni.navigateTo({
+							url: '/pages/notice/poster?id=5'
+						})
+					}
+				});
+			} else {
+				uni.navigateTo({
+					url: '/pages/groupBooking/klondike'
+				})
+			}
+		},
+		
+		//跳转开通美卡页面
+		Tomember() {
+			uni.showToast({
+				title: '敬请期待!',
+				type: 'top',
+				duration: 500,
+				icon: 'none'
+			});
+			// if(this.userInfo == ''){
+			// 	getUserInfo({})
+			// 		.then(({ data }) => {
+			// 			this.setUserInfo(data);
+			// 			this.userInfo = data;
+			// 		})
+			// 		.catch(e => {});
+			// }else{
+			// 	if (this.userInfo.level_info.grade > 99) {
+			// 		uni.navigateTo({
+			// 			url: '/pages/user/renew'
+			// 		});
+			// 	}
+			// 	if (this.userInfo.level_info.grade < 100) {
+			// 		uni.navigateTo({
+			// 			url: '/pages/user/card'
+			// 		});
+			// 	}
+			// }
+		},
+		//跳转今日秒杀页面
+		ToSeckill() {
+			uni.navigateTo({
+				url: '/pages/seckill/seckill'
+			});
+		},
+		//跳转退换货协议页面
+		Toreturned() {
+			// 只允许通过相机扫码
+			// uni.scanCode({
+			//     onlyFromCamera: true,
+			//     success: function (res) {
+
+			//     }
+			// });
+			uni.navigateTo({
+				url: '/pages/index/returned'
+			});
+		},
+		//跳转商品分类页面
+		ToCategory(ls) {
+			console.log(ls);
+			let item = ls;
+			// 保存当前选中的分类
+			uni.setStorageSync('categoryId', item);
+			if (item == '48') {
+				uni.navigateTo({
+					url: '/pages/shareQrCode/index'
+				});
+			} else if (item == '49') {
+				uni.navigateTo({
+					url: '/pages/service/service'
+				});
+			} else {
+				uni.switchTab({
+					url: '/pages/category/category'
+				});
+			}
+		},
+		//商品分类
+		Category() {
+			uni.switchTab({
+				url: '/pages/category/category'
+			});
+		},
+		// 监听切换事件
+		listChange(e) {
+			this.checkid = e.detail.current;
+		},
+		// 點擊搜索框
+		clickSearch() {
+			uni.navigateTo({
+				url: '/pages/product/search'
+			});
+		},
+		//点击切换商品种类
+		change(item) {
+			let id = item;
+			this.checkid = id;
+			console.log(this.checkid);
+			if (this.checkid == 0) {
+				this.detail = this.bastList;
+			}
+			if (this.checkid == 1) {
+				this.detail = this.benefitList;
+			}
+			if (this.checkid == 2) {
+				this.detail = this.firstList;
+			}
+			if (this.checkid == 3) {
+				this.detail = this.hotList;
+			}
+		},
+		// 监听图片加载完成
+		onImageError(key, index) {
+			this[key][index].image = '/static/error/errorImage.jpg';
+		},
+		//轮播图切换修改背景色
+		swiperChange(e) {
+			const index = e.detail.current;
+			let color = this.carouselList[index].color;
+			this.swiperCurrent = index;
+			this.header_color = 'linear-gradient(0deg, rgba(255, 255, 255, 1) 0%, ' + color + '100%) ';
+			this.Textlist_color = color;
+		},
+		//跳转商品详情页
+		navToDetailPage(item) {
+			let id = item.id;
+			uni.navigateTo({
+				url: '/pages/product/product?id=' + id
+			});
+		},
+		//跳转拼团商品详情页
+		ToGroup() {
+			uni.navigateTo({
+				url: '/pages/groupBooking/index'
+			});
+		},
+		//选择地址
+		Toaddress() {
+			if (!this.addressPageShow) {
+				this.upAddressPageShow();
+			}
+			uni.navigateTo({
+				url: '/pages/index/address'
+			});
+		},
+		Toshare() {
+			if (this.userInfo == '') {
+				getUserInfo({})
+					.then(({ data }) => {
+						this.setUserInfo(data);
+						this.userInfo = data;
+					})
+					.catch(e => {});
+			} else {
+				this.shareShow = false;
+				uni.navigateTo({
+					url: '/pages/shareQrCode/index?spread=' + this.userInfo.uid
+				});
+			}
+		},
+		Tocancel() {
+			this.shareShow = false;
+		},
+		StartDate() {
+			let obj = this;
+			console.log(obj.workstarTime);
+			console.log(this.workendTime);
+			// 获取当前时间
+			let now = new Date();
+			let year = now.getFullYear(); //得到年份
+			let month = now.getMonth(); //得到月份
+			let date = now.getDate(); //得到日期
+			let hour = now.getHours(); //得到小时
+			let minu = now.getMinutes(); //得到分钟
+			let sec = now.getSeconds(); //得到秒
+			//获取早上开始营业的时间戳
+			let aa = this.workstarTime.split(':');
+			let bb = aa[0];
+			let cc = aa[1];
+			let dd = String(cc).split('');
+			let ff = dd[0];
+			let gg = dd[1];
+			console.log(bb, ff, gg);
+			let time1 = new Date(year, month, date, bb, ff, gg);
+			let morning = time1.getTime();
+			//获取现在时间的时间戳
+			let time2 = new Date(year, month, date, hour, minu, sec);
+			let present = time2.getTime();
+			//获取晚上结束营业的时间戳
+			let a = this.workendTime.split(':');
+			let b = a[0];
+			let c = a[1];
+			let d = String(c).split('');
+			let f = d[0];
+			let g = d[1];
+			console.log(b, f, g);
+			let time3 = new Date(year, month, date, b, f, g);
+			console.log(time1, 'time1');
+			console.log(time3, 'time3');
+			let night = time3.getTime();
+			//现在时间大于结束时间,活动结束
+			// if(present > time3){
+			// 	console.log('现在时间大于结束时间,活动结束')
+			// 	obj.end = true;
+			// }
+			//现在时间大于开始时间小于结束时间,活动进行中
+			if (present < time3 && present > time1) {
+				console.log('现在时间大于开始时间小于结束时间,活动进行中');
+				obj.Timeing = true;
+				let starTime = time3 - present;
+				console.log(time3,present,'present')
+				console.log(starTime,'starTime')
+				let hours = Math.floor((starTime / 1000 / 60 / 60) % 24); //获取剩余小时数
+				let minutes = Math.floor((starTime / 1000 / 60) % 60); //获取分钟
+				let seconds = Math.floor((starTime / 1000) % 60); //获取秒数
+				obj.Timeinghour = hours;
+				obj.Timeingminute = minutes;
+				obj.Timeingsecond = seconds;
+				console.log('时间差是: ' + obj.Timeinghour + '小时, ' + obj.Timeingminute + '分钟, ' + obj.Timeingsecond + '秒', '距离晚上22:00点结束');
+			}
+			//现在时间小于开始时间,活动还未开始
+			if (present < time1) {
+				console.log('现在时间小于开始时间,活动还未开始');
+				obj.starting = true;
+				let starTime = time1 - present;
+				let hours = Math.floor((starTime / 1000 / 60 / 60) % 24); //获取剩余小时数
+				let minutes = Math.floor((starTime / 1000 / 60) % 60); //获取分钟
+				let seconds = Math.floor((starTime / 1000) % 60); //获取秒数
+				obj.starthour = hours;
+				obj.startminute = minutes;
+				obj.startsecond = seconds;
+				console.log('时间差是: ' + obj.starthour + '小时, ' + obj.startminute + '分钟, ' + obj.startsecond + '秒', '距离早上7:00点开始');
+			}
+			//现在时间距离第二天开始时间
+			// day3.setTime(day3.getTime()+24*60*60*1000);
+			// var s3 = day3.getFullYear()+"-" + (day3.getMonth()+1) + "-" + day3.getDate();
+		},
+		GetDate() {
+			let obj = this;
+			let now = new Date();
+			//现在时间转换成时间戳
+			let nowTime = now.getTime();
+			now.setTime(now.getTime() + 24 * 60 * 60 * 1000);
+			let time = obj.workstarTime;
+			let data = now.getFullYear() + '-' + (now.getMonth() + 1) + '-' + now.getDate() + ' ' + time;
+			data = data.replace(/-/g, '/');
+			let time4 = new Date(data);
+			let tomorrow = time4.getTime();
+			let starTime = tomorrow - nowTime;
+			let hours = Math.floor((starTime / 1000 / 60 / 60) % 24); //获取剩余小时数
+			let minutes = Math.floor((starTime / 1000 / 60) % 60); //获取分钟
+			let seconds = Math.floor((starTime / 1000) % 60); //获取秒数
+			obj.hour = hours;
+			obj.minute = minutes;
+			obj.second = seconds;
+			console.log('时间差是: ' + hours + '小时, ' + minutes + '分钟, ' + seconds + '秒', '距离第二天6:40开始');
+		},
+		// 计算倒计时时间
+		timeComputed(da) {
+			let obj = this;
+			let stopTime = timeComputed(da);
+			obj.stopTimeH = stopTime.hours;
+			obj.stopTimeM = stopTime.minutes;
+			obj.stopTimeS = stopTime.seconds;
+		},
+		// 轮播图跳转
+		bannerNavToUrl(item) {
+			// #ifdef H5
+			uni.navigateTo({
+				url: item.url
+			});
+			// #endif
+			// #ifdef MP-WEIXIN
+			uni.navigateTo({
+				url: item.wap_url
+			});
+			// #endif
+			// // #ifdef H5
+			// if (item.wap_url.indexOf('http') > 0) {
+			// 	window.location.href = item.wap_url;
+			// }
+			// // #endif
+			// //测试数据没有写id,用title代替
+			// uni.navigateTo({
+			// 	url: item.wap_url
+			// });
+		},
+		//跳转接口
+		navTo(url) {
+			uni.navigateTo({
+				url
+			});
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+page {
+	background: #ffffff;
+}
+.Mask {
+	width: 100%;
+	height: 100vh;
+	position: fixed;
+	z-index: 99999;
+	background-color: rgba(0, 0, 0, 0.7);
+	top: 0;
+	image {
+		width: 100%;
+		height: 100vh;
+	}
+}
+.Toshare {
+	position: absolute;
+	width: 100%;
+	height: 700rpx;
+	top: 200rpx;
+}
+.Tocancel {
+	position: absolute;
+	width: 100%;
+	height: 100rpx;
+	bottom: 50rpx;
+}
+/*公用边框样式*/
+%icon {
+	margin-right: 10rpx;
+	display: inline-block;
+	padding: 2rpx 10rpx;
+	border: 1rpx solid $color-yellow;
+	color: $color-yellow;
+	line-height: 1;
+	font-size: $font-base;
+	border-radius: 10rpx;
+}
+.top_header {
+	.top-address {
+		position: fixed;
+		top: 0;
+		width: 100% !important;
+		z-index: 999;
+		padding-bottom: 25rpx;
+		//地址
+		.header {
+			width: 100%;
+			padding: 0 4%;
+			height: 100rpx;
+			display: flex;
+			align-items: center;
+			.time-box {
+				font-size: 26rpx;
+				color: #ffffff;
+				overflow: hidden; //(超出隐藏)
+				width: 45%;
+				.timeText {
+					isplay: inline-block;
+					white-space: nowrap;
+					animation: 10s wordsLoop linear infinite normal;
+				}
+			}
+			@keyframes wordsLoop {
+				0% {
+					transform: translateX(300px);
+					-webkit-transform: translateX(300px);
+				}
+				100% {
+					transform: translateX(-200%);
+					-webkit-transform: translateX(-200%);
+				}
+			}
+
+			@-webkit-keyframes wordsLoop {
+				0% {
+					transform: translateX(300px);
+					-webkit-transform: translateX(300px);
+				}
+				100% {
+					transform: translateX(-200%);
+					-webkit-transform: translateX(-200%);
+				}
+			}
+			
+			.addr {
+				height: 60rpx;
+				flex-shrink: 0;
+				display: flex;
+				align-items: center;
+				font-size: 32rpx;
+				width: 50%;
+				color: #ffffff;
+
+				.icon {
+					height: 60rpx;
+					margin-right: 15rpx;
+					display: flex;
+					align-items: center;
+					font-size: 42rpx;
+					color: #ffffff;
+				}
+			}
+			.config {
+				width: 120rpx;
+				height: 60rpx;
+				flex-shrink: 0;
+				display: flex;
+				.message {
+					width: 65rpx;
+					height: 65rpx;
+					display: flex;
+					justify-content: flex-end;
+					align-items: center;
+					font-size: 42rpx;
+					color: #ffffff;
+				}
+			}
+		}
+		//搜索框
+		.input-box {
+			width: 92%;
+			margin: 0rpx auto;
+			height: 70rpx;
+			background-color: #f5f5f5;
+			border-radius: 50rpx;
+			position: relative;
+			display: flex;
+			align-items: center;
+			.icon {
+				display: flex;
+				align-items: center;
+				position: absolute;
+				top: 0;
+				right: 0;
+				width: 60rpx;
+				height: 80rpx;
+				font-size: 34rpx;
+				color: #c0c0c0;
+			}
+			input {
+				padding-left: 28rpx;
+				height: 28rpx;
+				font-size: 28rpx;
+			}
+		}
+	}
+	.zhanwei {
+		width: 100% !important;
+		height: 160rpx;
+	}
+	.text-box {
+		padding: 30rpx 25rpx;
+		font-size: 22rpx;
+		color: #ffffff;
+		.text-center {
+			background: #ef747b;
+			border-radius: 50rpx;
+			padding: 7rpx 20rpx;
+			.img {
+				width: 25rpx;
+				height: 25rpx;
+				margin-right: 8rpx;
+				image {
+					width: 100%;
+					height: 100%;
+				}
+			}
+			.text {
+				font-size: 22rpx;
+				margin-top: -3rpx;
+			}
+		}
+	}
+	//轮播图
+	.swiper {
+		width: 100%;
+		display: flex;
+		justify-content: center;
+		.swiper-box {
+			width: 92%;
+			height: 346rpx;
+			overflow: hidden;
+			border-radius: 15upx;
+			// box-shadow: 0upx 8upx 25upx rgba(0, 0, 0, 0.2);
+			//兼容ios,微信小程序
+			position: relative;
+			z-index: 1;
+			swiper {
+				width: 100%;
+				height: 346rpx;
+				swiper-item {
+					image {
+						width: 100%;
+						height: 346rpx;
+					}
+				}
+			}
+			.indicator {
+				position: absolute;
+				bottom: 20upx;
+				left: 20upx;
+				background-color: rgba(255, 255, 255, 0.4);
+				width: 150upx;
+				height: 5upx;
+				border-radius: 3upx;
+				overflow: hidden;
+				display: flex;
+				.dots {
+					width: 0upx;
+					background-color: rgba(255, 255, 255, 1);
+					transition: all 0.3s ease-out;
+					&.on {
+						width: (100%/3);
+					}
+				}
+			}
+		}
+	}
+}
+.floor-item {
+	margin: 0rpx 25rpx;
+	.list-image {
+		width: 140rpx;
+		height: 140rpx;
+		border-radius: 15rpx;
+	}
+	.price-list {
+		font-size: 20rpx;
+		position: absolute;
+		top: 0;
+		left: 0;
+		width: 100%;
+		padding: 5rpx 10rpx;
+		line-height: 1;
+		height: 33rpx;
+		align-items: flex-end;
+		.out-price {
+			color: #b25e15;
+			text-decoration: line-through;
+			font-size: 17rpx;
+		}
+		.xianprice {
+			color: #ffffff;
+			font-size: 24rpx !important;
+			// padding-bottom: 5rpx;
+		}
+		.moneyIcon {
+			font-size: 17rpx;
+		}
+	}
+}
+//拼团列表
+.Make-group {
+	margin-top: 25rpx !important;
+	// color: #157142;
+	color: #b33ec5;
+	font-size: 26rpx;
+	margin: 0rpx 20rpx;
+	padding: 10rpx 6rpx;
+	// background: linear-gradient(0deg, rgba(124, 224, 128, 1), rgba(220, 250, 196, 1));
+	background: linear-gradient(0deg, rgba(141,88,254, 1), rgba(237,224,252, 1));
+	border-radius: 21rpx;
+	.floor-list {
+		.scoll-wrapper {
+		}
+	}
+
+	.group-title {
+		padding-bottom: 20rpx;
+		margin: 0 25rpx;
+		margin-top: 15rpx;
+		.title {
+			// color: #157142;
+			color: #b33ec5;
+			font-size: 36rpx;
+			font-weight: bolder;
+		}
+		.tip {
+		}
+		.tpl {
+			width: 44%;
+			font-weight: normal !important;
+			font-size: 26rpx !important;
+		}
+		.detail {
+			font-size: 28rpx !important;
+			background: linear-gradient(90deg, rgba(255, 116, 0, 1), rgba(254, 5, 0, 1), rgba(254, 10, 0, 1));
+			padding: 5rpx 20rpx;
+			border-radius: 25rpx;
+			color: #ffffff;
+		}
+	}
+}
+.content {
+	width: 100%;
+	height: 220rpx;
+	margin: 20rpx 0rpx 45rpx 0rpx;
+	image {
+		width: 100%;
+		height: 100%;
+	}
+}
+/* 秒杀专区 */
+.seckill-section {
+	padding: 4rpx 30rpx 24rpx;
+	.s-header {
+		display: flex;
+		align-items: center;
+		height: 92rpx;
+		line-height: 1;
+		.tit-box {
+			flex-shrink: 0;
+		}
+		.tit {
+			@extend %font-title;
+		}
+		.f-left-icon {
+			@extend %f-left-icon;
+		}
+		.textNav {
+			line-height: 1;
+			padding: 15rpx 0;
+			flex-shrink: 0;
+			flex-grow: 1;
+			min-width: 100rpx;
+			text-align: right;
+		}
+		.tip-box {
+			flex-grow: 1;
+			display: flex;
+			justify-content: flex-start;
+			align-items: center;
+		}
+		.tip {
+			font-size: $font-sm;
+			color: $font-color-light;
+			padding-left: 10rpx;
+			padding-right: 10rpx;
+		}
+		.timer {
+			display: inline-block;
+			width: 40rpx;
+			height: 36rpx;
+			text-align: center;
+			line-height: 36rpx;
+			margin-right: 14rpx;
+			font-size: $font-sm + 2rpx;
+			color: #fff;
+			border-radius: 2px;
+			background: rgba(0, 0, 0, 0.8);
+		}
+		.iconenter {
+			font-size: $font-sm;
+			color: $font-color-light;
+			flex: 1;
+			text-align: right;
+		}
+	}
+}
+.floor-list {
+	white-space: nowrap;
+	background-color: white;
+	padding: 20rpx;
+	border-radius: 5rpx;
+}
+.tpl-box {
+	position: relative;
+	image {
+		width: 149rpx;
+		height: 33rpx;
+	}
+}
+.scoll-wrapper {
+	display: flex;
+	align-items: flex-start;
+	.noGoodsBg {
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		height: 100%;
+		position: absolute;
+		top: 0;
+		left: 0;
+		width: 100%;
+		color: $font-color-light;
+	}
+	.floor-item {
+		width: 200rpx;
+		margin-right: 20rpx;
+		font-size: $font-sm + 2rpx;
+		color: $font-color-dark;
+		line-height: 1.8;
+		.list-image {
+			width: 200rpx;
+			height: 200rpx;
+			border-radius: 6rpx;
+			image {
+				width: 100%;
+				height: 100%;
+			}
+		}
+		.price {
+			color: $color-red;
+		}
+	}
+}
+//商品分类
+.category-section {
+	display: flex;
+	flex-wrap: wrap;
+	padding-left: 40rpx;
+	font-size: 24rpx;
+	color: #656565;
+	.category-item {
+		text-align: center;
+		overflow: hidden;
+		display: flex;
+		flex-direction: column;
+		width: 112rpx;
+		background-color: white;
+		&:nth-child(n + 1) {
+			margin-right: 4%;
+		}
+	}
+	.image-wrapper {
+		width: 100%;
+		height: 112rpx;
+		border-radius: 100%;
+		overflow: hidden;
+		image {
+			width: 100%;
+			height: 100%;
+			opacity: 1;
+			border-radius: 100%;
+		}
+	}
+	.title {
+		padding-bottom: 15rpx;
+	}
+}
+
+// 接龙
+.solitaire {
+	// background: linear-gradient(270deg, rgba(181,116,242, 1) 0%, rgba(139,86,254, 1) 100%);
+	background: linear-gradient(90deg, rgba(45,190,89, 1) 0%, rgba(37,215,79, 1) 100%);
+	border-radius: 10rpx;
+	margin: 20rpx 25rpx;
+	font-size: 24rpx;
+	padding: 0rpx 20rpx;
+	height: 84rpx;
+	color: #ffffff;
+	.Member-code {
+		font-size: 26rpx;
+		display: flex;
+		align-items: center;
+	}
+	.Member-box {
+		image {
+			width: 45rpx;
+			height: 38rpx;
+		}
+	}
+	.Member-text {
+		margin-left: 15rpx;
+		color: rgba(255, 255, 255, 1);
+	}
+}
+
+//开通美卡
+.Member {
+	background: linear-gradient(270deg, rgba(37, 214, 79, 1) 0%, rgba(45, 189, 89, 1) 100%);
+	border-radius: 10rpx;
+	margin: 15rpx 25rpx;
+	font-size: 24rpx;
+	padding: 0rpx 20rpx;
+	height: 84rpx;
+	color: #ffffff;
+	.Member-code {
+		font-size: 26rpx;
+		display: flex;
+		align-items: center;
+	}
+	.Member-box {
+		image {
+			width: 45rpx;
+			height: 38rpx;
+		}
+	}
+	.Member-text {
+		margin-left: 15rpx;
+		color: rgba(255, 255, 255, 1);
+	}
+}
+.time-box {
+	position: relative;
+}
+.seckill-section {
+	padding: 4rpx 30rpx 24rpx;
+	.s-header {
+		display: flex;
+		align-items: center;
+		height: 92rpx;
+		line-height: 1;
+		.tit-box {
+			flex-shrink: 0;
+		}
+		.tit {
+			@extend %font-title;
+			margin-right: 15;
+		}
+		.f-left-icon {
+			@extend %f-left-icon;
+			background-image: linear-gradient(#71d094, #5dbc7c);
+		}
+		.textNav {
+			font-size: 28rpx;
+			color: #2dbd59;
+		}
+		.tip-box {
+			flex-grow: 1;
+			display: flex;
+			justify-content: flex-start;
+			align-items: center;
+		}
+		.tip {
+			font-size: $font-sm;
+			color: $font-color-light;
+			padding-left: 10rpx;
+			padding-right: 10rpx;
+		}
+		.timer {
+			display: inline-block;
+			width: 40rpx;
+			height: 36rpx;
+			text-align: center;
+			line-height: 36rpx;
+			margin-right: 14rpx;
+			font-size: $font-sm + 2rpx;
+			color: #fff;
+			border-radius: 2px;
+			background: rgba(0, 0, 0, 0.8);
+		}
+		.iconenter {
+			font-size: $font-sm;
+			color: $font-color-light;
+			flex: 1;
+			text-align: right;
+		}
+	}
+	.floor-list {
+		white-space: nowrap;
+		background-color: white;
+		padding: 20rpx;
+		border-radius: 5rpx;
+	}
+	.scoll-wrapper {
+		display: flex;
+		align-items: flex-start;
+		.noGoodsBg {
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			height: 100%;
+			position: absolute;
+			top: 0;
+			left: 0;
+			width: 100%;
+			color: $font-color-light;
+		}
+		.floor-item {
+			width: 200rpx;
+			font-size: $font-sm + 2rpx;
+			margin-right: 25rpx;
+			.list-image {
+				width: 200rpx;
+				height: 200rpx;
+			}
+			.tpl {
+				padding-left: 15rpx;
+				.title {
+					font-size: 26rpx !important;
+				}
+				.img {
+					width: 50rpx;
+					height: 50rpx;
+					image {
+						width: 100%;
+						height: 100%;
+					}
+				}
+				.price {
+					padding-top: 15rpx;
+					font-size: 24rpx;
+					font-weight: bold;
+					color: rgba(255, 26, 39, 1);
+				}
+				.otPrice {
+					font-size: 20rpx;
+					font-weight: 400;
+					text-decoration: line-through;
+					color: rgba(153, 153, 153, 1);
+				}
+				.price-green {
+					color: #2dbd59;
+					font-size: 28rpx !important;
+					text {
+						background: #2dbd59;
+						color: #ffffff;
+						padding: 0rpx 10rpx;
+						border-radius: 7rpx;
+						font-size: 22rpx !important;
+						margin-left: 15rpx;
+					}
+				}
+			}
+		}
+	}
+}
+//过渡分割线
+.transition {
+	background: #f0f0f0;
+	width: 100%;
+	height: 20rpx;
+	margin-bottom: 25rpx;
+}
+// 特色专区
+.characteristic {
+	margin-bottom: 25rpx;
+	.characteristic-box {
+		font-size: 26rpx;
+		width: 93%;
+		margin: 0rpx auto;
+		border-radius: 15rpx;
+		border: 1rpx solid #f8f6f6;
+		.box {
+			border-bottom: 1rpx solid #f8f6f6;
+			.characteristic-list {
+				padding: 25rpx 25rpx;
+				width: 50%;
+				border-right: 1rpx solid #f8f6f6;
+				.list-tpl {
+					font-size: 30rpx;
+					font-weight: bold;
+					color: rgba(51, 51, 51, 1);
+				}
+				.red {
+					background: linear-gradient(140deg, rgba(254, 74, 50, 1) 0%, rgba(254, 148, 84, 1) 100%);
+					-webkit-background-clip: text;
+					-webkit-text-fill-color: transparent;
+				}
+				.pink {
+					background: linear-gradient(140deg, rgba(243, 42, 60, 1) 0%, rgba(255, 74, 144, 1) 100%);
+					-webkit-background-clip: text;
+					-webkit-text-fill-color: transparent;
+				}
+				.blue {
+					background: linear-gradient(140deg, rgba(1, 115, 213, 1) 0%, rgba(12, 127, 225, 1) 0%, rgba(58, 161, 251, 1) 100%);
+					-webkit-background-clip: text;
+					-webkit-text-fill-color: transparent;
+				}
+				.green {
+					background: linear-gradient(140deg, rgba(18, 159, 55, 1) 0%, rgba(110, 206, 70, 1) 100%);
+					-webkit-background-clip: text;
+					-webkit-text-fill-color: transparent;
+				}
+				.list-tip {
+					font-size: 24rpx;
+					padding: 10rpx 0rpx;
+					margin-bottom: 10rpx;
+					font-weight: 500;
+					color: rgba(153, 153, 153, 1);
+				}
+				.list-img {
+					.img {
+						width: 140rpx;
+						height: 140rpx;
+						image {
+							width: 100%;
+							height: 100%;
+						}
+					}
+				}
+			}
+		}
+	}
+}
+//商品种类卡片切换
+.recommend {
+	width: 95%;
+	height: 155rpx;
+	margin: 0rpx auto;
+	padding-top: 30rpx;
+	font-size: 24rpx;
+	text-align: center;
+	color: #333333;
+	align-items: flex-start;
+	.recommend_list {
+		width: 33%;
+	}
+	.re_title {
+		font-size: 30rpx;
+		font-weight: bold;
+	}
+	.re_name {
+		color: #999999;
+		padding-top: 10rpx;
+	}
+	.selected_icon {
+		width: 25rpx;
+		height: 10rpx;
+		margin: 0px auto;
+		display: none;
+		image {
+			width: 100%;
+			height: 100%;
+		}
+	}
+	.active {
+		display: block;
+	}
+	.active_color {
+		background: linear-gradient(to right, rgba(106, 242, 46, 1) 0%, #1bcc26);
+		-webkit-background-clip: text;
+		color: transparent;
+	}
+	.active_name {
+		background: linear-gradient(-21deg, rgba(27, 204, 38, 1), rgba(106, 242, 46, 1));
+		border-radius: 16px;
+		color: #ffffff;
+		padding: 5rpx 15rpx;
+	}
+}
+.f-header {
+	display: flex;
+	align-items: center;
+	height: 92rpx;
+	padding: 6rpx 30rpx 8rpx;
+	image {
+		flex-shrink: 0;
+		width: 80rpx;
+		height: 80rpx;
+		margin-right: 20rpx;
+	}
+	.tit-box {
+		@extend %font-title-box;
+	}
+	.tit {
+		@extend %font-title;
+	}
+	.iconenter {
+		font-size: $font-lg + 2rpx;
+		color: $font-color-light;
+	}
+	.f-left-icon {
+		@extend %f-left-icon;
+	}
+	.iconfont {
+		font-size: $font-sm - 2rpx;
+	}
+}
+// 美卡升级礼包
+.uservip {
+	border-radius: $border-radius-sm;
+	background-color: white;
+	box-shadow: $box-shadow;
+	height: 300rpx;
+	margin: 0 30rpx;
+	image {
+		height: 100%;
+		width: 300rpx;
+	}
+	.detail {
+		position: relative;
+		padding: 20rpx;
+		height: 100%;
+		.icon {
+			@extend %icon;
+		}
+		.price-box {
+			position: absolute;
+			bottom: 20rpx;
+			width: calc(100% - 40rpx);
+			.price {
+				font-size: $font-lg + 2rpx;
+				font-weight: bold;
+				color: $font-color-base;
+			}
+			.text {
+				color: $color-gray;
+				font-size: $font-sm;
+			}
+		}
+		.title {
+			font-size: $font-lg;
+			font-weight: bold;
+		}
+	}
+}
+
+/* 猜你喜欢 */
+.guess-section {
+	display: flex;
+	flex-wrap: wrap;
+	padding: 0 20rpx;
+	/* #ifdef H5 */
+	padding-bottom: 100rpx;
+	/* #endif */
+	.guess-item {
+		// height: 558rpx;
+		position: relative;
+		overflow: hidden;
+		display: flex;
+		flex-direction: column;
+		border: 2rpx solid #eeeeee;
+		width: 343rpx;
+		margin-bottom: 4%;
+		border-radius: $border-radius-sm;
+		background-color: white;
+		padding-bottom: 30rpx;
+		&:nth-child(2n + 1) {
+			margin-right: 24rpx;
+		}
+	}
+	.imagewrapper {
+		width: 100%;
+		height: 330rpx;
+		border-radius: 3px;
+		margin-bottom: 15rpx;
+		image {
+			width: 100%;
+			height: 100%;
+			// opacity: 1;
+		}
+	}
+	.guess-list {
+		height: 130rpx;
+		padding: 0rpx 25rpx;
+		.title {
+			font-size: 28rpx;
+			color: $font-color-dark;
+		}
+		.info {
+			color: #999999;
+			font-size: 24rpx;
+		}
+		.tipBox {
+			// padding-bottom: 8rpx;
+			.tipsl {
+				text {
+					border: 2rpx solid #ff1a27;
+					color: #ff1a27;
+					border-radius: 5rpx;
+					font-size: 18rpx;
+					padding: 2rpx 5rpx;
+					margin-right: 15rpx;
+				}
+			}
+		}
+	}
+	.price {
+		font-size: 28rpx;
+		width: 303rpx;
+		// padding-top: 25rpx;
+		position: relative;
+		.price_list {
+			.price-red {
+				font-weight: bold;
+				font-size: 32rpx !important;
+				color: #ff1a27;
+				text {
+					color: #9699a0;
+					font-size: 24rpx !important;
+					font-weight: normal;
+					padding: 0rpx 10rpx;
+				}
+			}
+			.price-green {
+				color: #2dbd59;
+				font-size: 24rpx !important;
+				text {
+					background: #2dbd59;
+					color: #ffffff;
+					padding: 0rpx 8 rpx;
+					border-radius: 7rpx;
+					font-size: 20rpx !important;
+					margin-left: 8rpx;
+				}
+			}
+		}
+		.img {
+			position: absolute;
+			bottom: 0;
+			right: 0;
+			width: 50rpx;
+			height: 50rpx;
+			image {
+				width: 100%;
+				height: 100%;
+			}
+		}
+	}
+
+	.icon {
+		@extend %icon;
+	}
+
+	.detail {
+		line-height: 1;
+	}
+	.tip {
+		color: white;
+		background-color: $color-yellow;
+		line-height: 1.5;
+		font-size: $font-sm;
+		padding-left: 20rpx;
+	}
+}
+.TipsBox {
+	position: fixed;
+	bottom: 118rpx;
+	width: 100%;
+	padding: 50rpx 50rpx;
+	font-size: 30rpx;
+	background-color: #fdfbcb;
+	color: #444025;
+	text {
+		background-color: #ffbd1e;
+		padding: 10rpx 25rpx;
+		border-radius: 100rpx;
+		color: #ffffff;
+		margin-left: 10rpx;
+	}
+}
+</style>

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