Преглед на файлове

Merge branch 'dev' into 'master'

Dev

See merge request quanshu/mp-ui-user!44
dai xiaodan преди 2 години
родител
ревизия
e8616efd75
променени са 48 файла, в които са добавени 5408 реда и са изтрити 2560 реда
  1. 1 1
      src/App.vue
  2. 4 4
      src/components/area-picker/area-picker.vue
  3. 420 370
      src/components/pay-popup/pay-popup.vue
  4. 1 1
      src/config/prod.js
  5. 36 32
      src/packageGoods/coupon/index.vue
  6. 4 1
      src/packageGoods/goods/detail.vue
  7. 0 13
      src/packageGoods/goods/list.vue
  8. 802 614
      src/packageGoods/order/detail.vue
  9. 1 8
      src/packageGoods/order/index.vue
  10. 1 1
      src/packageGoods/order/settlement.vue
  11. 217 0
      src/packageGoods/promoters/index.vue
  12. 18 25
      src/packageGoods/ticket/index.vue
  13. 19 17
      src/packageOperate/activity/index.vue
  14. 2 2
      src/packageOperate/activity/wxofficial.vue
  15. 0 2
      src/packageOperate/address/index.vue
  16. 1 1
      src/packageOperate/process/index.vue
  17. 0 0
      src/packageOther/about/conceal.vue
  18. 3 4
      src/packageOther/about/index.vue
  19. 0 0
      src/packageOther/about/protect.vue
  20. 2 2
      src/packageOther/rule/index.vue
  21. 23 0
      src/packageOther/rule/purchase.vue
  22. 213 0
      src/packagePrize/address/index.vue
  23. 0 7
      src/packagePrize/bean/index.vue
  24. 9 6
      src/packagePrize/choice/index.vue
  25. 91 0
      src/packagePrize/components/address-popup/address-popup.vue
  26. 78 26
      src/packagePrize/coupon/detail.vue
  27. 0 7
      src/packagePrize/coupon/use.vue
  28. 333 0
      src/packagePrize/goods/index.vue
  29. 32 28
      src/packagePrize/prize/index.vue
  30. 113 0
      src/packagePrize/purchase/index.vue
  31. 389 0
      src/packagePrize/rolling/animation.vue
  32. 8 6
      src/packagePrize/rolling/index.vue
  33. 15 20
      src/packagePrize/ticket/index.vue
  34. 19 0
      src/pages.json
  35. 0 7
      src/pages/activity/index.vue
  36. 130 132
      src/pages/core/index.vue
  37. 1213 0
      src/pages/index/index -2022-7-15.vue
  38. 1206 1210
      src/pages/index/index.vue
  39. 4 4
      src/pages/lucky/index.vue
  40. 0 9
      src/pages/ticketBox/detail.vue
  41. BIN
      src/static/index/barrage_bgTwo.png
  42. BIN
      src/static/index/index_anniu.png
  43. BIN
      src/static/index/index_beijing.png
  44. BIN
      src/static/index/index_duihuandating.png
  45. BIN
      src/static/index/index_tip_bgTwo.png
  46. BIN
      src/static/lucky/lucky_gkmptwo.png
  47. BIN
      src/static/lucky/zioff.png
  48. BIN
      src/static/public/promoter.png

+ 1 - 1
src/App.vue

@@ -21,7 +21,7 @@
 				uni.setStorageSync('code', parameter.id)
 			}
 			this.updateManager()
-			this.anotherApplet()
+			// this.anotherApplet() //打包盲票小程序时候解开
 		},
 		methods: {
 			updateManager() {

+ 4 - 4
src/components/area-picker/area-picker.vue

@@ -39,6 +39,9 @@
 				
 			};
 		},
+		mounted() {
+			this.getArea()
+		},
 		methods: {
 			//切换
 			async bindChange(e){
@@ -85,7 +88,7 @@
 					pid: 0
 				})
 				let cityRes = await $http.post('/api/v1/mp/area/listByPid', {
-					pid: provinceRes && provinceRes.data && provinceRes.data[1].areaId
+					pid: provinceRes && provinceRes.data && provinceRes.data[0].areaId
 				})
 				let areaRes = await $http.post('/api/v1/mp/area/listByPid', {
 					pid: cityRes && cityRes.data && cityRes.data[0].areaId
@@ -98,9 +101,6 @@
 				this.$emit('cancel')
 			},
 		},
-		mounted() {
-			this.getArea()
-		}
 	}
 </script>
 

+ 420 - 370
src/components/pay-popup/pay-popup.vue

@@ -1,372 +1,422 @@
-<template>
-	<view>
-		<u-popup :show="payShow" mode="bottom" round="17" @close="close" :closeable="true" overlayOpacity="0.5"
-			@touchmove.prevent.stop>
-			<view class="choiceShow-wrap">
-				<!-- 盲票信息 -->
-				<view class="flex goods">
-					<view class="flex image-wrap">
-						<image :src="payInfo.picUrl" mode="aspectFit"></image>
-					</view>
-					<view class="info">
-						<view class="info-title">{{ payInfo.title }}</view>
-						<view class="info-stock">¥{{ $numberFormat( payInfo.orderAmt ) }}</view>
-					</view>
-				</view>
-				<!-- 优惠券信息 -->
-				<view class="flex coupon" @click="toCoupon">
-					<view class="flex coupon-left">
-						<image src="../../static/public/public_coupon.png" mode="scaleToFill"></image>
-						<view class="txt">优惠券</view>
-					</view>
-					<view class="coupon-right flex">
-						<view class="txt coupon-right-color" v-if="$numberFormat(payInfo.discountAmt) != 0">
-							-¥{{ $numberFormat(payInfo.discountAmt)}}</view>
-						<view class="txt" v-else-if="total != 0">{{ total }}张可用</view>
-						<view class="txt" v-else>暂无可用优惠券</view>
-						<image src="../../static/public/public_right_arrow.png" mode="scaleToFill"></image>
-					</view>
-				</view>
-				<view class="flex agreement">
-					<view class="checked">
-						<u-checkbox-group>
-							<u-checkbox :value="checked" :checked="checked" shape="circle" activeColor="#F9822C"
-								@change="changeChecked"></u-checkbox>
-						</u-checkbox-group>
-					</view>
-					<!-- #ifndef MP-ALIPAY -->
-					<view class="txt" @click="toRule">同意《盲票购买协议》</text></view>
-					<!-- #endif -->
-					<!-- #ifdef MP-ALIPAY -->
-					<view class="txt">同意《盲票购买协议》</text></view>
-					<!-- #endif -->
-				</view>
-				<view class="flex btn">
-					<view class="flex btn-left">
-						<view class="title">应付:</view>
-						<view class="flex price">¥{{ $numberFormat(payInfo.payAmt) }}</view>
-					</view>
-					<view class="btn-right">
-						<view class="confirm" @click="pay">立即支付</view>
-					</view>
-				</view>
-			</view>
-		</u-popup>
-
-		<auth :auth-show="authShow" @close="authShow = false" />
-	</view>
-</template>
-
-<script>
-	import $http from '@/utils/request.js'
-	import appId from '@/config/appId.js'
-	import Auth from '../../components/auth/auth.vue'
-	export default {
-		name: "pay-popup",
-		components: {
-			Auth
-		},
-		props: {
-			payShow: {
-				type: [Boolean],
-				default: false
-			},
-			payInfo: {
-				type: [Object],
-				default: {}
-			}
-		},
-		data() {
-			return {
-				checked: true,
-				authShow: false,
-				total: 0,
-			};
-		},
-		created() {
+<template>
+	<view>
+		<u-popup :show="payShow" mode="bottom" round="17" @close="close" :closeable="true" overlayOpacity="0.5"
+			@touchmove.prevent.stop>
+			<view class="choiceShow-wrap">
+				<!-- 盲票信息 -->
+				<view class="flex goods">
+					<view class="flex image-wrap">
+						<image :src="payInfo.picUrl" mode="aspectFit"></image>
+					</view>
+					<view class="info">
+						<view class="info-title">{{ payInfo.title }}</view>
+						<view class="info-stock">¥{{ $numberFormat( payInfo.orderAmt ) }}</view>
+					</view>
+				</view>
+				<!-- 推广员信息 -->
+				<view class="flex coupon" @click="toPromoters" v-if="promoterNum > 0">
+					<view class="flex coupon-left">
+						<image src="../../static/public/promoter.png" mode="scaleToFill"></image>
+						<view class="txt">盲票天使</view>
+					</view>
+					<view class="coupon-right flex">
+						<view class="txt coupon-right-color" v-if="promoters && promoters.name">
+							{{`${ promoters.name } ( ${promoters.workNo} ) `}}
+						</view>
+						<view class="txt" v-else>选择盲票天使,运气更好哦</view>
+						<image src="../../static/public/public_right_arrow.png" mode="scaleToFill"></image>
+					</view>
+				</view>
+				<!-- 优惠券信息 -->
+				<view class="flex coupon" @click="toCoupon">
+					<view class="flex coupon-left">
+						<image src="../../static/public/public_coupon.png" mode="scaleToFill"></image>
+						<view class="txt">优惠券</view>
+					</view>
+					<view class="coupon-right flex">
+						<view class="txt coupon-right-color" v-if="$numberFormat(payInfo.discountAmt) != 0">
+							-¥{{ $numberFormat(payInfo.discountAmt)}}</view>
+						<view class="txt" v-else-if="total != 0">{{ total }}张可用</view>
+						<view class="txt" v-else>暂无可用优惠券</view>
+						<image src="../../static/public/public_right_arrow.png" mode="scaleToFill"></image>
+					</view>
+				</view>
+				<view class="flex agreement">
+					<view class="checked">
+						<u-checkbox-group>
+							<u-checkbox :value="checked" :checked="checked" shape="circle" activeColor="#F9822C"
+								@change="changeChecked"></u-checkbox>
+						</u-checkbox-group>
+					</view>
+					<view class="txt" @click="toRule">同意《商品购买协议》</text></view>
+				</view>
+				<view class="flex btn">
+					<view class="flex btn-left">
+						<view class="title">应付:</view>
+						<view class="flex price">¥{{ $numberFormat(payInfo.payAmt) }}</view>
+					</view>
+					<view class="btn-right">
+						<view class="confirm" @click="pay">立即支付</view>
+					</view>
+				</view>
+			</view>
+		</u-popup>
+
+		<auth :auth-show="authShow" @close="authShow = false" />
+	</view>
+</template>
+
+<script>
+	import $http from '@/utils/request.js'
+	import appId from '@/config/appId.js'
+	import Auth from '../../components/auth/auth.vue'
+	export default {
+		name: "pay-popup",
+		components: {
+			Auth
+		},
+		props: {
+			payShow: {
+				type: [Boolean],
+				default: false
+			},
+			payInfo: {
+				type: [Object],
+				default: {}
+			},
+		},
+		data() {
+			return {
+				checked: true,
+				authShow: false,
+				total: 0,
+				promoters: {
+					channelId: "", //id
+					name: "", //名字
+					workNo: "" //工号
+				},
+				promoterNum: 0, //推广员
+			};
+		},
+		created() {
+			if (this.payInfo.promoter) {
+				this.promoters = this.payInfo.promoter
+			}
 			this.getTotal()
-		},
-		methods: {
-			getTotal() {
-				$http.post(`/api/v1/mp/user/ticket/order/coupon/listPage`, {}).then(
-					res => {
-						if (res.code == 0) {
-							this.total = res.total
-						}
-					}).catch(() => {})
-			},
-			changeChecked(e) {
-				this.checked = e
-			},
-
-			toCoupon() {
-				uni.navigateTo({
-					url: `/packageGoods/coupon/index?couponId=${ this.payInfo.couponId }&boxId=${ this.payInfo.boxId }&ticketId=${ this.payInfo.ticketId }`
-				})
-			},
-
-			toRule() {
-				uni.navigateTo({
-					url: '/packageOther/rule/index'
-				})
-			},
-
-			close() {
-				this.$emit('close')
-			},
-
-			success(id) {
-				this.$emit('success', id)
-			},
-			pay() {
-				let _this = this
-				let payIng = false
-				if (!this.checked) {
-					uni.$u.toast('请同意《盲票产品规则》');
-					return
-				}
-				uni.showLoading({
-					title: '支付中'
-				});
-				if (payIng) return
-				let suid = uni.getStorageSync('shareUid')
-				$http.post('/api/v1/mp/user/ticket/order/submit', {
-					suid: suid !== 'undefined' && suid !== undefined ? suid : null,
-					type: uni.getStorageSync('shareType')
-				}).then(res => {
-					uni.hideLoading();
-					payIng = true
-					if (res.code == 0) {
-						if (res.data.needPay == 1) {
-							// #ifdef MP-ALIPAY
-							let data = {
-								orderId: res.data.orderId,
-								payType: 1,
-								appSource: appId 
-							}
-							// #endif
-							// #ifndef MP-ALIPAY
-							let data = {
-								orderId: res.data.orderId,
-								payType: 2,
-								appSource: appId
-							}
-							// #endif
-							$http.post('/api/v1/mp/user/ticket/order/pay', data).then(ele => {
-								if (ele.code == 0) {
-									// #ifdef MP-ALIPAY
-									my.tradePay({
-										tradeNO: ele.data.pay_info,
-										success:(resu) => {
-											if(resu.resultCode == '9000'){
-												uni.showToast({
-													title: '支付成功',
-													icon: 'success',
-													duration: 2000
-												})
-												_this.success(res.data.orderId)//跳转抽奖详情页
-											}else {
-												payIng = false
-												_this.close()
-											}
-										},
-										fail:(resu) => {
-											payIng = false
-											_this.close()
-										}
-									})
-									// #endif
-									// #ifndef MP-ALIPAY
-									uni.requestPayment({
-										timeStamp: ele.data.timeStamp,
-										nonceStr: ele.data.nonceStr,
-										package: ele.data.package,
-										signType: ele.data.signType,
-										paySign: ele.data.paySign,
-										success() {
-											uni.showToast({
-												title: '支付成功',
-												icon: 'success',
-												duration: 2000
-											})
-											_this.success(res.data.orderId)
-										},
-										fail() {
-											payIng = false
-											_this.close()
-										}
-									})
-									// #endif
-									
-								} else if (ele.code == 1005) {
-									_this.authShow = true
-								} else if (ele.code == 1026) {
-									_this.authShow = true
-								} else {
-									payIng = false
-									_this.close()
-									uni.$u.toast('支付失败');
-								}
-							}).catch(() => {
-								payIng = false
-								_this.close()
-								uni.$u.toast('支付异常');
-							})
-						} else {
-							uni.showToast({
-								title: '支付成功',
-								icon: 'success',
-								duration: 2000
-							})
-							_this.success(res.data.orderId)
-						}
-					} else if (res.code == 1020) {
-						payIng = false
-						_this.close()
-						uni.$u.toast(res.msg);
-					} else {
-						payIng = false
-						_this.close()
-						uni.$u.toast(res.msg);
-					}
-				}).catch(() => {
-					uni.hideLoading();
-					payIng = false
-					uni.$u.toast('订单创建失败');
-				})
-			},
-
-		},
-	}
-</script>
-
-<style lang="scss" scoped>
-	.coupon-right-color {
-		font-size: 32rpx;
-		line-height: 44rpx;
-		color: rgba(235, 112, 9, 100);
-	}
-</style>
-<style lang="scss" scoped>
-	.choiceShow-wrap {
-		min-height: 400rpx;
-		padding: 34rpx;
-
-		// 盲票信息
-		.goods {
-			justify-content: flex-start;
-			margin-bottom: 60rpx;
-
-			.image-wrap {
-				width: 220rpx;
-				height: 220rpx;
-				border-radius: 10rpx;
-				overflow: hidden;
-
-				image {
-					width: 100%;
-					height: 100%;
-				}
-			}
-
-			.info {
-				flex: 1;
-				display: flex;
-				height: 220rpx;
-				flex-direction: column;
-				justify-content: space-around;
-				padding-left: 34rpx;
-
-				&-title {
-					font-size: 36rpx;
-					line-height: 36rpx;
-					font-weight: bold;
-				}
-
-				&-stock {
-					font-size: 26rpx;
-					color: #FF4208;
-				}
-			}
-		}
-
-		// 优惠券
-		.coupon {
-			justify-content: space-between;
-			height: 40rpx;
-			margin-bottom: 46rpx;
-
-			&-left {
-				image {
-					width: 48rpx;
-					height: 40rpx;
-					margin-right: 18rpx;
-				}
-
-				.txt {
-					font-size: 30rpx;
-					font-weight: bold;
-				}
-			}
-
-			&-right {
-				height: 40rpx;
-
-				image {
-					width: 12rpx;
-					height: 22rpx;
-					margin-left: 14rpx;
-				}
-
-				.txt {
-					line-height: 26rpx;
-					font-size: 26rpx;
-					color: #666666;
-				}
-			}
-		}
-
-		// 同意协议
-		.agreement {
-			justify-content: flex-start;
-			margin-bottom: 56rpx;
-
-			.txt {
-				font-size: 26rpx;
-				color: #666666;
-			}
-		}
-
-		// 支付按钮
-		.btn {
-			justify-content: space-between;
-
-			&-left {
-				.title {
-					font-size: 13px;
-					font-weight: 500;
-				}
-
-				.price {
-					font-size: 30rpx;
-					font-weight: bold;
-					color: #FF4208;
-				}
-			}
-
-			&-right {
-				.confirm {
-					width: 414rpx;
-					height: 88rpx;
-					line-height: 88rpx;
-					background: #FA822C;
-					border-radius: 44rpx;
-					font-size: 36rpx;
-					color: #fff;
-					text-align: center;
-				}
-
-			}
-		}
-	}
+			if(this.payInfo.channelId) {
+				this.getPromoterNum()
+			}
+		},
+		mounted() {
+			let that = this
+			uni.$on('promoters', function(data) {
+				that.promoters = data
+				that.payInfo.promoter = data
+			})
+		},
+		methods: {
+			getTotal() {
+				$http.post(`/api/v1/mp/user/ticket/order/coupon/listPage`, {}).then(
+					res => {
+						if (res.code == 0) {
+							this.total = res.total
+						}
+					}).catch(() => {})
+			},
+			getPromoterNum() {
+				$http.post(`/api/v1/mp/channel/promoter/list?pageNum=1&pageSize=20`, {
+					channelId: this.payInfo.channelId,
+				}).then(res => {
+					if (res.code == 0) {
+						this.promoterNum = res.total
+					}
+				}).catch(() => {})
+			},
+			changeChecked(e) {
+				this.checked = e
+			},
+
+			toPromoters() {
+				let index = ''
+				if (this.payInfo.promoter) {
+					index = this.payInfo.promoter.channelId
+				} else {
+					index = 0
+				}
+				uni.navigateTo({
+					url: `/packageGoods/promoters/index?channelId=${ this.payInfo.channelId }&index=${ index }`
+				})
+			},
+
+			toCoupon() {
+				uni.navigateTo({
+					url: `/packageGoods/coupon/index?couponId=${ this.payInfo.couponId }&boxId=${ this.payInfo.boxId }&ticketId=${ this.payInfo.ticketId }`
+				})
+			},
+
+			toRule() {
+				uni.navigateTo({
+					url: '/packageOther/rule/purchase'
+				})
+			},
+
+			close() {
+				this.$emit('close')
+			},
+
+			success(id) {
+				this.$emit('success', id)
+			},
+			pay() {
+				let _this = this
+				let payIng = false
+				if (!this.checked) {
+					uni.$u.toast('请同意《盲票产品规则》');
+					return
+				}
+				uni.showLoading({
+					title: '支付中'
+				});
+				if (payIng) return
+				let suid = uni.getStorageSync('shareUid')
+				$http.post('/api/v1/mp/user/ticket/order/submit', {
+					promoterId: this.promoters && this.promoters.channelId ? this.promoters.channelId : null,
+					suid: suid !== 'undefined' && suid !== undefined ? suid : null,
+					type: uni.getStorageSync('shareType')
+				}).then(res => {
+					uni.hideLoading();
+					payIng = true
+					if (res.code == 0) {
+						if (res.data.needPay == 1) {
+							// #ifdef MP-ALIPAY
+							let data = {
+								orderId: res.data.orderId,
+								payType: 1,
+								appSource: appId
+							}
+							// #endif
+							// #ifndef MP-ALIPAY
+							let data = {
+								orderId: res.data.orderId,
+								payType: 2,
+								appSource: appId
+							}
+							// #endif
+							$http.post('/api/v1/mp/user/ticket/order/pay', data).then(ele => {
+								if (ele.code == 0) {
+									// #ifdef MP-ALIPAY
+									my.tradePay({
+										tradeNO: ele.data.pay_info,
+										success: (resu) => {
+											if (resu.resultCode == '9000') {
+												uni.showToast({
+													title: '支付成功',
+													icon: 'success',
+													duration: 2000
+												})
+												_this.success(res.data.orderId) //跳转抽奖详情页
+											} else {
+												payIng = false
+												_this.close()
+											}
+										},
+										fail: (resu) => {
+											payIng = false
+											_this.close()
+										}
+									})
+									// #endif
+									// #ifndef MP-ALIPAY
+									uni.requestPayment({
+										timeStamp: ele.data.timeStamp,
+										nonceStr: ele.data.nonceStr,
+										package: ele.data.package,
+										signType: ele.data.signType,
+										paySign: ele.data.paySign,
+										success() {
+											uni.showToast({
+												title: '支付成功',
+												icon: 'success',
+												duration: 2000
+											})
+											_this.success(res.data.orderId)
+										},
+										fail() {
+											payIng = false
+											_this.close()
+										}
+									})
+									// #endif
+
+								} else if (ele.code == 1005) {
+									_this.authShow = true
+								} else if (ele.code == 1026) {
+									_this.authShow = true
+								} else {
+									payIng = false
+									_this.close()
+									uni.$u.toast('支付失败');
+								}
+							}).catch(() => {
+								payIng = false
+								_this.close()
+								uni.$u.toast('支付异常');
+							})
+						} else {
+							uni.showToast({
+								title: '支付成功',
+								icon: 'success',
+								duration: 2000
+							})
+							_this.success(res.data.orderId)
+						}
+					} else if (res.code == 1020) {
+						payIng = false
+						_this.close()
+						uni.$u.toast(res.msg);
+					} else {
+						payIng = false
+						_this.close()
+						uni.$u.toast(res.msg);
+					}
+				}).catch(() => {
+					uni.hideLoading();
+					payIng = false
+					uni.$u.toast('订单创建失败');
+				})
+			},
+
+		},
+	}
+</script>
+
+<style lang="scss" scoped>
+	.coupon-right-color {
+		font-size: 32rpx;
+		line-height: 44rpx;
+		color: rgba(235, 112, 9, 100);
+	}
+</style>
+<style lang="scss" scoped>
+	.choiceShow-wrap {
+		min-height: 400rpx;
+		padding: 34rpx;
+
+		// 盲票信息
+		.goods {
+			justify-content: flex-start;
+			margin-bottom: 60rpx;
+
+			.image-wrap {
+				width: 220rpx;
+				height: 220rpx;
+				border-radius: 10rpx;
+				overflow: hidden;
+
+				image {
+					width: 100%;
+					height: 100%;
+				}
+			}
+
+			.info {
+				flex: 1;
+				display: flex;
+				height: 220rpx;
+				flex-direction: column;
+				justify-content: space-around;
+				padding-left: 34rpx;
+
+				&-title {
+					font-size: 36rpx;
+					line-height: 36rpx;
+					font-weight: bold;
+				}
+
+				&-stock {
+					font-size: 26rpx;
+					color: #FF4208;
+				}
+			}
+		}
+
+		// 优惠券
+		.coupon {
+			justify-content: space-between;
+			height: 40rpx;
+			margin-bottom: 46rpx;
+
+			&-left {
+				image {
+					width: 48rpx;
+					height: 40rpx;
+					margin-right: 18rpx;
+				}
+
+				.txt {
+					font-size: 30rpx;
+					font-weight: bold;
+				}
+			}
+
+			&-right {
+				height: 40rpx;
+
+				image {
+					width: 12rpx;
+					height: 22rpx;
+					margin-left: 14rpx;
+				}
+
+				.txt {
+					line-height: 26rpx;
+					font-size: 26rpx;
+					color: #666666;
+				}
+			}
+		}
+
+		// 同意协议
+		.agreement {
+			justify-content: flex-start;
+			margin-bottom: 56rpx;
+
+			.txt {
+				font-size: 26rpx;
+				color: #666666;
+			}
+		}
+
+		// 支付按钮
+		.btn {
+			justify-content: space-between;
+
+			&-left {
+				.title {
+					font-size: 13px;
+					font-weight: 500;
+				}
+
+				.price {
+					font-size: 30rpx;
+					font-weight: bold;
+					color: #FF4208;
+				}
+			}
+
+			&-right {
+				.confirm {
+					width: 414rpx;
+					height: 88rpx;
+					line-height: 88rpx;
+					background: #FA822C;
+					border-radius: 44rpx;
+					font-size: 36rpx;
+					color: #fff;
+					text-align: center;
+				}
+
+			}
+		}
+	}
 </style>

+ 1 - 1
src/config/prod.js

@@ -1,7 +1,7 @@
 export default {
   env: "prod",
   // #ifndef H5
-  apiBase: "https://mp-api.51jiazhu.com",
+  apiBase: "https://mp-api.kaimanghe.net",
   // #endif
   // #ifdef H5
   apiBase: process.env.VUE_APP_BASE_API,

+ 36 - 32
src/packageGoods/coupon/index.vue

@@ -1,16 +1,18 @@
 <template>
 	<view>
 		<!-- #ifdef MP-ALIPAY -->
-		<u-navbar :placeholder="true" bgColor="#fff" :autoBack="true" :border="true" title="选择优惠券" leftIconSize="0"></u-navbar>
+		<u-navbar :placeholder="true" bgColor="#fff" :autoBack="true" :border="true" title="选择优惠券" leftIconSize="0">
+		</u-navbar>
 		<!-- #endif -->
 		<!-- #ifndef MP-ALIPAY -->
 		<u-navbar :placeholder="true" bgColor="#fff" :autoBack="true" :border="true" title="选择优惠券"></u-navbar>
 		<!-- #endif -->
-		
+
 		<view class="coupon-title">可用优惠券:{{ total }}</view>
 		<view class="coupon-list">
 			<u-radio-group v-model="radiovalue1" placement="column" @change="changeChechk()">
-				<view class="flex coupon-list-item" v-for="(item,index) in list" :key="index" :style="{backgroundImage:`url(${ index == isActive ? backOn : backOff })`}">
+				<view class="flex coupon-list-item" v-for="(item,index) in list" :key="index"
+					:style="{backgroundImage:`url(${ index == isActive ? backOn : backOff })`}">
 					<view class="flex coupon-list-item-info">
 						<view class="money">
 							<!-- <view class="">¥<text>{{ item.discount / 100 }}</text></view> -->
@@ -28,17 +30,21 @@
 						</view>
 					</view>
 					<view class="uradio">
-						<u-radio :customStyle="{ marginBottom: '8px' }" :name="item.id" activeColor="#E96737" size="24" @change="exclusive(index)">
-					</u-radio>
+						<u-radio :customStyle="{ marginBottom: '8px' }" :name="item.id" activeColor="#E96737" size="24"
+							@change="exclusive(index)">
+						</u-radio>
 					</view>
-					
 				</view>
+				<u-loadmore :line="true" v-if="list.length>5" :status="status" :loading-text="'努力加载中'"
+					:nomore-text="'已经到底了'" />
 			</u-radio-group>
 		</view>
 
 		<view class="flex empty" v-if="!list.length">
 			<view class="center">
-				<image class="center-img" src="https://mp-public-1310078123.cos.ap-shanghai.myqcloud.com/v2/nodata_1.png" mode="scaleToFill"></image>
+				<image class="center-img"
+					src="https://mp-public-1310078123.cos.ap-shanghai.myqcloud.com/v2/nodata_1.png" mode="scaleToFill">
+				</image>
 				<view class="center-font">暂无优惠券</view>
 			</view>
 			<!-- <u-empty text="数据为空" mode="order" /> -->
@@ -69,7 +75,8 @@
 				couponId: '', //选中项的id
 				boxId: '',
 				ticketId: '',
-				
+				status: 'nomore', //上拉刷新状态
+
 				isActive: undefined,
 				backOn: "https://mp-public-1310078123.cos.ap-shanghai.myqcloud.com/v2/coupon_bkg2.png",
 				backOff: "https://mp-public-1310078123.cos.ap-shanghai.myqcloud.com/v2/coupon_bkg1.png",
@@ -99,12 +106,8 @@
 
 			getList() {
 				let _this = this
-				uni.showLoading({
-					title: '加载中'
-				});
 				$http.post(`/api/v1/mp/user/ticket/order/coupon/listPage?pageNum=${_this.pageNum}&pageSize=20`, {}).then(
 					res => {
-						uni.hideLoading();
 						if (res.code == 0) {
 							this.listNum = res.rows.length
 							res.rows.forEach(item => {
@@ -114,17 +117,16 @@
 							_this.list = [..._this.list, ...res.rows]
 							_this.total = res.total
 							for (var i = 0; i < _this.list.length; i++) {
-								if(_this.list[i].id == _this.couponId){
+								if (_this.list[i].id == _this.couponId) {
 									_this.isActive = i
 								}
 							}
 						}
 
 					}).catch(() => {
-					uni.hideLoading();
 				})
 			},
-			
+
 			exclusive(index) {
 				this.isActive = index
 			},
@@ -176,21 +178,19 @@
 		},
 		onReachBottom() {
 			// 判断是否有数据
-			if (this.total > this.pageNum * 20) {
-				setTimeout(() => {
-					++this.pageNum
-					this.getList()
-				}, 500)
-			} else {
-				uni.$u.toast('已经到底了')
-			}
+			if (this.total < this.pageNum * 20) return;
+			this.status = 'loading';
+			++this.pageNum
+			if (this.total < this.pageNum * 20) this.status = 'nomore';
+			else this.status = 'loading';
+			this.getList()
 		},
 	}
 </script>
 
 <style lang="scss" scoped>
 	.coupon {
-		
+
 		&-title {
 			position: fixed;
 			z-index: 10;
@@ -201,7 +201,7 @@
 
 		&-list {
 			margin-top: 100rpx;
-			padding: 0 20rpx 100rpx;
+			padding: 0 20rpx 200rpx;
 
 			&-item {
 				justify-content: space-between;
@@ -227,6 +227,7 @@
 						flex-direction: column;
 						align-items: flex-start;
 						justify-content: space-between;
+
 						.txt {
 							font-size: 24rpx;
 							line-height: 24rpx;
@@ -244,18 +245,19 @@
 					.money {
 						width: 220rpx;
 						height: 100%;
-						margin:0 10rpx 0;
+						margin: 0 10rpx 0;
+
 						.price {
 							position: absolute;
 							color: #fff;
 							z-index: 0;
-							
+
 							text:first-child {
 								line-height: 150rpx;
 								font-size: 70rpx;
 								padding-right: 20rpx;
 							}
-							
+
 							text:last-child {
 								font-size: 40rpx;
 							}
@@ -264,8 +266,10 @@
 				}
 
 				.uradio {
-					position: absolute;right: 40rpx;
+					position: absolute;
+					right: 40rpx;
 				}
+
 				.circle {
 					width: 40rpx;
 					height: 40rpx;
@@ -285,15 +289,15 @@
 
 	.empty {
 		height: 60vh;
-		
+
 		.center {
 			text-align: center;
-		
+
 			&-img {
 				width: 228rpx;
 				height: 320rpx;
 			}
-		
+
 			&-font {
 				font-size: 30rpx;
 				font-weight: 400;

+ 4 - 1
src/packageGoods/goods/detail.vue

@@ -25,7 +25,7 @@
 					</view>
 					<view class="detail-info-left__price">¥{{ $numberFormat(info.value) }}</view>
 				</view>
-				<view class="detail-info-right" v-show="false">销量:30个</view>
+				<!-- <view class="detail-info-right" v-show="false">销量:30个</view> -->
 			</view>
 			<view class="detail-goods">产品介绍</view>
 			<view class="detail-description">
@@ -53,9 +53,12 @@
 					<text>{{ info.exchangePrice }}个</text>
 					<text>盲豆兑换</text>
 				</view>
+				<!-- #ifndef MP-ALIPAY -->
 				<view class="footer-fixed-content__price flex" @click="purchase">
 					<text>立即购买</text>
 				</view>
+				<!-- #endif -->
+				
 			</view>
 		</view>
 

+ 0 - 13
src/packageGoods/goods/list.vue

@@ -112,9 +112,6 @@
 			
 			// 商品列表
 			getList() {
-				uni.showLoading({
-					title: '加载中'
-				});
 				let data = {
 					goodsName: this.title,
 					priceSort: this.priceSort,
@@ -125,7 +122,6 @@
 				}
 				$http.post(`/api/v1/mp/user/exchange/goods/list?pageNum=${this.pageNum}&pageSize=20`,data).then(
 					res => {
-						uni.hideLoading();
 						if (res.code == 0) {
 							res.rows.forEach(item => {
 								item.picUrl = env.filePublic + item.picUrl.split(',')[0] + '?imageView2/2/w/340'
@@ -134,7 +130,6 @@
 							this.list = this.list.concat(res.rows)
 						}
 					}).catch(() => {
-					uni.hideLoading();
 				})
 			},
 			
@@ -162,16 +157,13 @@
 				this.pageList()
 			},
 		},
-		
 		onReachBottom() {
 			if(this.total < this.pageNum * 20) return ;
 			this.status = 'loading';
-			// setTimeout(() => {
 			++this.pageNum
 			if(this.total < this.pageNum * 20) this.status = 'nomore';
 				else this.status = 'loading';
 			this.getList()
-			// }, 2000)
 		},
 	}
 </script>
@@ -310,11 +302,6 @@
 					}
 				}
 			}
-			
-			&-item:last-child {
-				box-shadow: none;
-				background: none;
-			}
 		}
 	}
 	

+ 802 - 614
src/packageGoods/order/detail.vue

@@ -1,614 +1,802 @@
-<template>
-	<view class="detail">
-		<!-- #ifdef MP-ALIPAY -->
-		<u-navbar title="订单详情" :border="true" :placeholder="true" :autoBack="true" bgColor="#fff" leftIconSize="0" />
-		<!-- #endif -->
-		<!-- #ifndef MP-ALIPAY -->
-		<u-navbar title="订单详情" :border="true" :placeholder="true" :autoBack="true" bgColor="#fff" />
-		<!-- #endif -->
-		<!-- 订单状态 -->
-		<view class="status">
-			<image src="../../packageGoods/static/ordr/bg.png" mode="scaleToFill"></image>
-			<view class="status-info">
-				<image src="../../packageGoods/static/ordr/car.png" mode="scaleToFill"></image>
-				<view class="status-info-contet">
-					<view class="status-info-contet-txt" :class="{'status-info-contet-one': status.value != 2 }">{{ status.desc }}</view>
-					<view class="status-info-contet-time" v-if="status.value == 2">还剩 {{ autoConfirmTime || "--" }} 自动确认</view>
-				</view>
-			</view>
-		</view>
-		
-		<!-- 地址 -->
-		<view class="address">
-			<view class="address-content">
-				<image src="../static/ordr/addr.png" mode="scaleToFill"></image>
-				<view class="address-content-txt">
-					<view class="name">{{ info.receiver }} <text> {{ info.tel }}</text></view>
-					<view class="city ells">{{ info.province }} {{ info.city }} {{ info.area }} {{ info.address }}</view>
-				</view>
-			</view>
-		</view>
-		
-		<!-- 商品 -->
-		<view class="goods">
-			<view class="goods-title">商品信息</view>
-			<view class="goods-item" v-for="(item, index) in list" :key="index">
-				<image :src="item.picUrl" mode="aspectFit"></image>
-				<view class="info">
-					<view class="info-title ells">{{ item.title }}</view>
-					<view class="info-num flex">
-						<view class="info-num-sku ells-one">规格:{{ item.properties || '-' }}</view>
-						<view class="info-num-goods">共{{ item.goodsNum }}件</view>
-					</view>
-				</view>
-			</view>
-			<!-- 运费 -->
-			<view class="goods-freight">
-				<view class="freight-title">运费</view>
-				<view class="freight-price">¥{{ $numberFormat(info.freightAmt) }}</view>
-			</view>
-			<!-- 总价 -->
-			<view class="goods-total flex">
-				<view class="goods-total-price">应付:<text>¥{{ $numberFormat(info.payAmt) }}</text></view>
-			</view>
-		</view>
-		
-		<!-- 订单信息 -->
-		<view class="order">
-			<view class="order-title">订单信息</view>
-			<view class="order-item flex">
-				<view class="order-item-title">订单编号</view>
-				<view class="order-item-content flex" @click="copyOrderId" v-if="status.value == 2 || status.value == 4">
-					<text>{{ info.orderId }}</text>
-					<view class="copy flex">
-						<text>复制</text>
-					</view>
-				</view>
-				<view class="order-item-content flex" v-else>{{ info.orderId }}</view>
-			</view>
-			<view class="order-item flex">
-				<view class="order-item-title">下单时间</view>
-				<view class="order-item-content">{{ $parseTime(info.createdTime) }}</view>
-			</view>
-		</view>
-		
-		<!-- 发货信息 -->
-		<!-- <view class="order">
-			<view class="order-title">发货信息</view>
-			<view class="order-item flex">
-				<view class="order-item-title">配送方式</view>
-				<view class="order-item-content">无需物流</view>
-			</view>
-			<view class="order-item flex">
-				<view class="order-item-title">发货时间</view>
-				<view class="order-item-content">{{ $parseTime(info.createdTime) }}</view>
-			</view>
-		</view> -->
-		
-		<!-- 留言 -->
-		<view class="order" v-if="info.memo != ''">
-			<view class="order-title">留言</view>
-			<view class="order-item flex">
-				<view class="order-item-title tip">{{ info.memo }}</view>
-			</view>
-		</view>
-
-		<!-- 操作按钮 -->
-		<view class="footer-fixed" v-if="status.value == 2 || status.value == 3 || status.value == 0">
-			<view class="btn flex">
-				<view class="btn-item flex logistics" v-if="status.value == 2 || status.value == 3"  @click="getLogistics"><text>查看物流</text></view>
-				<view class="btn-item flex pay" v-if="status.value == 2"  @click="confirmOne"><text>确认收货</text></view>
-				<view class="btn-item flex cancel" v-if="status.value == 0" @click="cancelOrder"><text>取消订单</text></view>
-				<view class="btn-item flex pay"v-if="status.value == 0"  @click="payOrder"><text>去支付</text></view>
-			</view>
-		</view>
-		
-		<auth :auth-show="authShow" @close="authShow = false" />
-	</view>
-</template>
-
-<script>
-	import env from '../../config/env.js'
-	import $http from '@/utils/request.js'
-	import appId from '@/config/appId.js'
-	import Auth from '../../components/auth/auth.vue'
-	export default {
-		components: {
-			Auth
-		},
-		data() {
-			return {
-				orderId: '',
-				status: {},
-				info: {},
-				addr: {},
-				list: [],
-				deliverList: [],
-				autoConfirmTime: '',
-				authShow: false,
-			};
-		},
-		onLoad(opthios) {
-			this.orderId = opthios.id
-			this.getDetail()
-		},
-		methods: {
-			getDetail() {
-				uni.showLoading({
-					title: '加载中'
-				});
-				$http.post('/api/v1/mp/user/deliver/order/detail', {
-					orderId: this.orderId
-				}).then(res => {
-					uni.hideLoading();
-					this.info = res.data
-					this.status = JSON.parse(res.data.status)
-					this.autoConfirmTime = res.data.autoConfirmTime
-					res.data.items.forEach(item => {
-						let picUrlArr = item.picUrl.split(',')
-						item.picUrl = env.filePublic + picUrlArr[0] + '?imageView2/2/w/170'
-					})
-					res.data.deliverList && res.data.deliverList.forEach((item) => {
-						item.items.forEach((ele) => {
-							let picUrlArr = ele.picUrl.split(",");
-							ele.picUrl = env.filePublic + picUrlArr[0] + '?imageView2/2/w/170';
-						});
-					});
-					this.deliverList = res.data.deliverList;
-					this.list = res.data.items
-				}).catch(() => {
-					uni.hideLoading();
-				})
-			},
-
-			cancelOrder() {
-				let orderId = this.orderId
-				uni.showModal({
-					title: '提示',
-					content: '您确认要取消订单吗?',
-					success(res) {
-						if (res.confirm) {
-							$http.post('/api/v1/mp/user/deliver/order/cancel', {
-								orderId
-							}).then(res => {
-								if (res.code == 0) {
-									uni.$u.toast('订单取消成功');
-									setTimeout(() => {
-										uni.navigateBack({
-											delta: 1
-										})
-									}, 500)
-								}
-							})
-						}
-					}
-				})
-			},
-
-			payOrder() {
-				let _this = this
-				let payIng = false
-				if (payIng) return
-				uni.showLoading({
-					title: '加载中'
-				});
-				// #ifdef MP-ALIPAY
-				let data = {
-					orderId: _this.info.orderId,
-					payType: 1,
-					appSource: appId 
-				}
-				// #endif
-				// #ifndef MP-ALIPAY
-				let data = {
-					orderId: _this.info.orderId,
-					payType: 2,
-					appSource: appId 
-				}
-				// #endif
-				$http.post('/api/v1/mp/user/deliver/order/pay', data).then(ele => {
-					payIng = true
-					uni.hideLoading();
-					if (ele.code == 0) {
-						// #ifdef MP-ALIPAY
-						my.tradePay({
-							tradeNO: ele.data.pay_info,
-							success(resu) {
-								if(resu.resultCode == '9000'){
-									uni.showToast({
-										title: '支付成功',
-										icon: 'success',
-										duration: 2000
-									})
-									setTimeout(() => {
-										uni.navigateBack({
-											delta: 1
-										})
-									}, 500)
-								}else {
-									payIng = false
-								}
-							},
-							fail() {
-								payIng = false
-							}
-						})
-						// #endif
-						// #ifndef MP-ALIPAY
-						uni.requestPayment({
-							timeStamp: ele.data.timeStamp,
-							nonceStr: ele.data.nonceStr,
-							package: ele.data.package,
-							signType: ele.data.signType,
-							paySign: ele.data.paySign,
-							success() {
-								uni.showToast({
-									title: '支付成功',
-									icon: 'success',
-									duration: 2000
-								})
-								setTimeout(() => {
-									uni.navigateBack({
-										delta: 1
-									})
-								}, 500)
-							},
-							fail() {
-								payIng = false
-							}
-						})
-						// #endif
-					} else if (ele.code == 1005) {
-						_this.authShow = true
-					} else if (ele.code == 1026) {
-						_this.authShow = true
-					} else {
-						payIng = false
-						uni.$u.toast(res.msg);
-					}
-				}).catch(() => {
-					payIng = false
-					uni.$u.toast('支付失败');
-					uni.hideLoading();
-				})
-			},
-
-			copyOrderId() {
-				uni.setClipboardData({
-					data: this.info.orderId,
-				});
-			},
-
-			copyDeliveryFlowId(id) {
-				uni.setClipboardData({
-					data: id,
-				});
-			},
-
-			// 查看物流
-			getLogistics() {
-				uni.navigateTo({
-					url: `/packageGoods/order/logistics?id=${ this.orderId }`
-					// url:`/pages/order/logistics?id=96666733329055749370`
-				});
-			},
-
-			// 确认收货
-			confirmOne() {
-				let orderId = this.orderId
-				uni.showModal({
-					title: '提示',
-					content: '确定已经收到货了吗?',
-					success(res) {
-						if (res.confirm) {
-							$http.post('/api/v1/mp/user/deliver/order/confirm', {
-								orderId
-							}).then(res => {
-								if (res.code == 0) {
-									uni.$u.toast('确认收货成功');
-									setTimeout(() => {
-										uni.navigateBack({
-											delta: 1
-										})
-									}, 500)
-								}
-							})
-						}
-					}
-				})
-			}
-		}
-	}
-</script>
-<style lang="scss" scoped>
-	.detail {
-		padding-bottom: 200rpx;
-	}
-	
-	// 订单状态
-	.status {
-		position: relative;
-		height: 216rpx;
-		
-		image {
-			width: 100%;
-			height: 100%;
-		}
-		
-		&-info {
-			position: absolute;
-			top: 0;
-			display: flex;
-			width: 100%;
-			height: 100%;
-			padding: 56rpx 0 0 34rpx;
-			
-			image {
-				width: 74rpx;
-				height: 62rpx;
-				margin: 18rpx 22rpx 0 0;
-			}
-			
-			&-contet {
-				&-txt {
-					font-size: 38rpx;
-					font-weight: 800;
-					color: #FFFFFF;
-					line-height: 60rpx;
-				}
-				
-				&-one {
-					margin-top: 18rpx;
-					height: 62rpx;
-					line-height: 62rpx;
-				}
-				
-				&-time {
-					font-size: 30rpx;
-					font-weight: 500;
-					color: #FFFFFF;
-					line-height: 44rpx;
-				}
-			}
-		}
-	}
-	
-	// 地址
-	.address {
-		position: relative;
-		margin-top: -34rpx;
-		background-color: #fff;
-		border-radius: 34rpx 34rpx 0 0;
-		z-index: 10;
-		padding-top: 34rpx;
-		margin-bottom: 22rpx;
-		
-		&-content {
-			display: flex;
-			align-items: center;
-			// border-top: 1px dashed rgb(254, 143, 62);
-			padding: 18rpx 0 36rpx 34rpx;
-			
-			image {
-				width: 30rpx;
-				height: 38rpx;
-				margin-right: 34rpx;
-			}
-			
-			&-txt {
-				flex: 1;
-				
-				.name {
-					font-size: 30rpx;
-					line-height: 30rpx;
-					margin-bottom: 20rpx;
-					
-					text {
-						padding: 0 8rpx;
-						font-size: 26rpx;
-						color: #414141;
-					}
-				}
-				
-				.city {
-					color: #999999;
-					line-height: 28rpx;
-				}
-			}
-		}
-	}
-	
-	// 商品
-	.goods {
-		padding: 34rpx;
-		background-color: #fff;
-		margin-bottom: 22rpx;
-		
-		&-title {
-			font-size: 30rpx;
-			line-height: 30rpx;
-			margin-bottom: 22rpx;
-		}
-		
-		// 商品列表
-		&-item{
-			display: flex;
-			padding: 34rpx 32rpx 34rpx 22rpx;
-			box-shadow: 0px 0px 8px 0px rgba(26, 35, 113, 0.08);
-			border-radius: 4rpx;
-			margin-bottom: 20rpx;
-			
-			image {
-				width: 176rpx;
-				height: 176rpx;
-				border-radius: 12rpx;
-				margin-right: 22rpx;
-			}
-			
-			.info {
-				display: flex;
-				flex-direction: column;
-				justify-content: space-between;
-				flex: 1;
-				padding: 8rpx 0;
-				
-				&-title {
-					font-weight: bold;
-					line-height: 40rpx;
-				}
-				
-				&-num {
-					justify-content: space-between;
-					
-					&-sku {
-						flex: 1;
-						color: #666666;
-						font-size: 26rpx;
-					}
-					
-					&-goods {
-						color: #666666;
-						font-size: 26rpx;
-					}
-				}
-			}
-		}
-		
-		&-item:last-child {
-			margin-bottom: 0;
-		}
-		
-		// 运费
-		&-freight {
-			display: flex;
-			align-items: center;
-			justify-content: space-between;
-			padding-bottom: 18rpx;
-			border-bottom: 1px solid #eee;
-			margin-bottom: 20rpx;
-			
-			&-title {
-				line-height: 28rpx;
-				color: #999;
-			}
-			
-			&-price {
-				line-height: 28rpx;
-			}
-		}
-		
-		// 总价
-		&-total {
-			justify-content: flex-end;
-			
-			&-price {
-				font-size: 30rpx;
-				color: #F24E4E;
-			}
-		}
-	}
-	
-	// 订单信息
-	.order {
-		padding: 34rpx;
-		background-color: #fff;
-		margin-bottom: 22rpx;
-		
-		&-title {
-			font-size: 30rpx;
-			line-height: 30rpx;
-			margin-bottom: 22rpx;
-		}
-		
-		&-item {
-			justify-content: space-between;
-			margin-bottom: 28rpx;
-			
-			&-title {
-				color: #999999;
-				line-height: 28rpx;
-			}
-			
-			.tip {
-				line-height: 40rpx;
-			}
-			
-			&-content {
-				.copy {
-					height: 100%;
-					margin-left: 8rpx;
-					text-align: center;
-					border-radius: 12rpx;
-					font-size: 24rpx;
-					line-height: 24rpx;
-					padding: 0 6rpx;
-					background-color: rgba(153, 153, 153, .1);
-					
-					text {
-						display: inline-block;
-						transform: scale(0.8);
-					}
-				}
-			}
-		}
-		
-		&-item:last-child {
-			margin-bottom: 0;
-		}
-	}
-	
-	// 操作按钮
-	.footer-fixed {
-		position: fixed;
-		bottom: var(--window-bottom);
-		left: 0;
-		right: 0;
-		z-index: 11;
-		box-shadow: 0 -4rpx 40rpx 0 rgba(151, 151, 151, 0.24);
-		background: #fff;
-		// 设置ios刘海屏底部横线安全区域
-		padding-bottom: constant(safe-area-inset-bottom);
-		padding-bottom: env(safe-area-inset-bottom);
-	
-		.btn {
-			justify-content: flex-end;
-			padding: 20rpx 34rpx;
-			
-			&-item {
-				width: 200rpx;
-				height: 66rpx;
-				font-size: 30rpx;
-				border-radius: 33rpx;
-				margin-left: 44rpx;
-					
-				text {
-					line-height: 30rpx;
-				}
-			}
-			
-			.logistics {
-				border: 1px solid #F9822C;
-				color: #F9822C;
-			}
-			
-			.detail {
-				background-color: rgb(249, 130, 44);
-				color: #FFFFFF;
-			}
-			
-			.cancel {
-				border: 1px solid #c4c6c9;
-				color: #c4c6c9;
-			}
-			
-			.pay {
-				background-color: #5ac725;
-				color: #fff;
-			}
-			
-			&-item:first-child {
-				margin-left: 0;
-			}
-		}
-	}
-</style>
+<template>
+	<view class="detail">
+		<!-- #ifdef MP-ALIPAY -->
+		<u-navbar title="订单详情" :border="true" :placeholder="true" :autoBack="true" bgColor="#fff" leftIconSize="0" />
+		<!-- #endif -->
+		<!-- #ifndef MP-ALIPAY -->
+		<u-navbar title="订单详情" :border="true" :placeholder="true" :autoBack="true" bgColor="#fff" />
+		<!-- #endif -->
+		<!-- 订单状态 -->
+		<view class="status">
+			<image src="../../packageGoods/static/ordr/bg.png" mode="scaleToFill"></image>
+			<view class="status-info">
+				<image src="../../packageGoods/static/ordr/car.png" mode="scaleToFill"></image>
+				<view class="status-info-contet">
+					<view class="status-info-contet-txt" :class="{'status-info-contet-one': status.value != 2 }">
+						{{ status.desc }}
+					</view>
+					<view class="status-info-contet-time" v-if="status.value == 2">还剩 {{ autoConfirmTime || "--" }} 自动确认
+					</view>
+				</view>
+			</view>
+		</view>
+
+		<!-- 地址 -->
+		<view class="address">
+			<view class="address-content">
+				<image src="../static/ordr/addr.png" mode="scaleToFill"></image>
+				<view class="address-content-txt">
+					<view class="name">{{ info.receiver }} <text> {{ info.tel }}</text></view>
+					<view class="city ells">{{ info.province }} {{ info.city }} {{ info.area }} {{ info.address }}
+					</view>
+				</view>
+			</view>
+		</view>
+
+		<!-- 商品 -->
+		<view class="goods">
+			<view class="goods-title">商品信息</view>
+			<view class="goods-item" v-for="(item, index) in list" :key="index">
+				<image :src="item.picUrl" mode="aspectFit"></image>
+				<view class="info">
+					<view class="info-title ells">{{ item.title }}</view>
+					<view class="info-num flex">
+						<view class="info-num-sku ells-one" v-if="info.type === 1">规格:{{ item.properties || '-' }}</view>
+						<view class="info-num-sku ells-one" v-else></view>
+						<view class="info-num-goods">共{{ item.goodsNum }}件</view>
+					</view>
+				</view>
+			</view>
+			<!-- 运费 -->
+			<view class="goods-freight">
+				<view class="freight-title">运费</view>
+				<view class="freight-price">¥{{ $numberFormat(info.freightAmt) }}</view>
+			</view>
+			<!-- 总价 -->
+			<view class="goods-total flex">
+				<view class="goods-total-price">应付:<text>¥{{ $numberFormat(info.payAmt) }}</text></view>
+			</view>
+		</view>
+
+		<!-- 卡密发货信息 -->
+		<view class="entire" v-if="info.type === 2 && info.status && JSON.parse(info.status).value === 3">
+			<view class="order">
+				<view class="order-title">发货信息</view>
+				<view class="order-item flex">
+					<view class="order-item-title">配送方式</view>
+					<view class="order-item-content">无需物流</view>
+				</view>
+				<view class="order-item flex">
+					<view class="order-item-title">发货时间</view>
+					<view class="order-item-content">{{ $parseTime(info.deliveryTime) }}</view>
+				</view>
+			</view>
+			<view class="entire-within" v-for="(item,index) in list" :key="index">
+				<view class="entire-within-info flex">
+					<image :src="item.picUrl" mode="aspectFit"></image>
+					<view class="info">
+						<view class="info-title ells">{{ item.title }}</view>
+						<view class="info-num">共{{ item.goodsNum }}件</view>
+					</view>
+				</view>
+				<view class="entire-within-card" style="justify-content: flex-start;" v-for="">
+					<view class="card" v-if="item.useLink">
+						<view class="card-left">使用链接:</view>
+						<view class="ells-one card-center">{{item.useLink}}</view>
+						<view class="card-right" @click="copyUseLink(item.useLink)">复制</view>
+					</view>
+					<view class="cardList" v-for="(items,indexs) in item.cardList" :key="indexs">
+						<view class="card">
+							<view class="card-left">卡号:</view>
+							<view class="ells-one card-center" v-if="items.cardNo">{{items.cardNo}}</view>
+							<view class="ells-one card-center" v-else>无卡号</view>
+							<view class="card-right" @click="copyCardNo(items.cardNo)" v-if="items.cardNo">复制</view>
+							<view class="card-righttwo" v-else></view>
+						</view>
+						<view class="card">
+							<view class="card-left">密码(激活码):</view>
+							<view class="ells-one card-center">{{items.cardPwd}}</view>
+							<view class="card-right" @click="copyCardPwd(items.cardPwd)">复制</view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+
+
+		<!-- 订单信息 -->
+		<view class="order">
+			<view class="order-title">订单信息</view>
+			<view class="order-item flex">
+				<view class="order-item-title">订单编号</view>
+				<view class="order-item-content flex" @click="copyOrderId"
+					v-if="status.value == 2 || status.value == 4">
+					<text>{{ info.orderId }}</text>
+					<view class="copy flex">
+						<text>复制</text>
+					</view>
+				</view>
+				<view class="order-item-content flex" v-else>{{ info.orderId }}</view>
+			</view>
+			<view class="order-item flex">
+				<view class="order-item-title">下单时间</view>
+				<view class="order-item-content">{{ $parseTime(info.createdTime) }}</view>
+			</view>
+		</view>
+
+		<!-- 留言 -->
+		<view class="order" v-if="info.memo != ''">
+			<view class="order-title">留言</view>
+			<view class="order-item flex">
+				<view class="order-item-title tip">{{ info.memo }}</view>
+			</view>
+		</view>
+
+		<!-- 操作按钮 -->
+		<view class="footer-fixed" v-if="status.value == 2 || status.value == 3 || status.value == 0">
+			<view class="btn flex">
+				<view class="btn-item flex logistics" v-if="status.value == 2 || status.value == 3 && info.type === 1"
+					@click="getLogistics"><text>查看物流</text></view>
+				<view class="btn-item flex pay" v-if="status.value == 2" @click="confirmOne"><text>确认收货</text></view>
+				<view class="btn-item flex cancel" v-if="status.value == 0" @click="cancelOrder"><text>取消订单</text>
+				</view>
+				<view class="btn-item flex pay" v-if="status.value == 0" @click="payOrder"><text>去支付</text></view>
+			</view>
+		</view>
+    <u-toast ref="uToast"></u-toast>
+		<auth :auth-show="authShow" @close="authShow = false" />
+	</view>
+</template>
+
+<script>
+	import env from '../../config/env.js'
+	import $http from '@/utils/request.js'
+	import appId from '@/config/appId.js'
+	import Auth from '../../components/auth/auth.vue'
+	export default {
+		components: {
+			Auth
+		},
+		data() {
+			return {
+				orderId: '',
+				status: {},
+				info: {},
+				addr: {},
+				list: [],
+				deliverList: [],
+				autoConfirmTime: '',
+				authShow: false,
+			};
+		},
+		onLoad(opthios) {
+			this.orderId = opthios.id
+			this.getDetail()
+		},
+		methods: {
+			getDetail() {
+				uni.showLoading({
+					title: '加载中'
+				});
+				$http.post('/api/v1/mp/user/deliver/order/detail', {
+					orderId: this.orderId
+				}).then(res => {
+					uni.hideLoading();
+					this.info = res.data
+					this.status = JSON.parse(res.data.status)
+					this.autoConfirmTime = res.data.autoConfirmTime
+					res.data.items.forEach(item => {
+						let picUrlArr = item.picUrl.split(',')
+						item.picUrl = env.filePublic + picUrlArr[0] + '?imageView2/2/w/170'
+					})
+					res.data.deliverList && res.data.deliverList.forEach((item) => {
+						item.items.forEach((ele) => {
+							let picUrlArr = ele.picUrl.split(",");
+							ele.picUrl = env.filePublic + picUrlArr[0] + '?imageView2/2/w/170';
+						});
+					});
+					this.deliverList = res.data.deliverList;
+					this.list = res.data.items
+				}).catch(() => {
+					uni.hideLoading();
+				})
+			},
+
+			cancelOrder() {
+				let orderId = this.orderId
+				uni.showModal({
+					title: '提示',
+					content: '您确认要取消订单吗?',
+					success(res) {
+						if (res.confirm) {
+							$http.post('/api/v1/mp/user/deliver/order/cancel', {
+								orderId
+							}).then(res => {
+								if (res.code == 0) {
+									uni.$u.toast('订单取消成功');
+									setTimeout(() => {
+										uni.navigateBack({
+											delta: 1
+										})
+									}, 500)
+								}
+							})
+						}
+					}
+				})
+			},
+
+			payOrder() {
+				let _this = this
+				let payIng = false
+				if (payIng) return
+				uni.showLoading({
+					title: '加载中'
+				});
+				// #ifdef MP-ALIPAY
+				let data = {
+					orderId: _this.info.orderId,
+					payType: 1,
+					appSource: appId
+				}
+				// #endif
+				// #ifndef MP-ALIPAY
+				let data = {
+					orderId: _this.info.orderId,
+					payType: 2,
+					appSource: appId
+				}
+				// #endif
+				$http.post('/api/v1/mp/user/deliver/order/pay', data).then(ele => {
+					payIng = true
+					uni.hideLoading();
+					if (ele.code == 0) {
+						// #ifdef MP-ALIPAY
+						my.tradePay({
+							tradeNO: ele.data.pay_info,
+							success(resu) {
+								if (resu.resultCode == '9000') {
+									uni.showToast({
+										title: '支付成功',
+										icon: 'success',
+										duration: 2000
+									})
+									setTimeout(() => {
+										uni.navigateBack({
+											delta: 1
+										})
+									}, 500)
+								} else {
+									payIng = false
+								}
+							},
+							fail() {
+								payIng = false
+							}
+						})
+						// #endif
+						// #ifndef MP-ALIPAY
+						uni.requestPayment({
+							timeStamp: ele.data.timeStamp,
+							nonceStr: ele.data.nonceStr,
+							package: ele.data.package,
+							signType: ele.data.signType,
+							paySign: ele.data.paySign,
+							success() {
+								uni.showToast({
+									title: '支付成功',
+									icon: 'success',
+									duration: 2000
+								})
+								setTimeout(() => {
+									uni.navigateBack({
+										delta: 1
+									})
+								}, 500)
+							},
+							fail() {
+								payIng = false
+							}
+						})
+						// #endif
+					} else if (ele.code == 1005) {
+						_this.authShow = true
+					} else if (ele.code == 1026) {
+						_this.authShow = true
+					} else {
+						payIng = false
+						uni.$u.toast(res.msg);
+					}
+				}).catch(() => {
+					payIng = false
+					uni.$u.toast('支付失败');
+					uni.hideLoading();
+				})
+			},
+
+			copyOrderId() {
+				uni.setClipboardData({
+					data: this.info.orderId,
+				});
+				// #ifdef MP-ALIPAY
+				this.$refs.uToast.show({
+					message: "内容已复制"
+				})
+				// #endif
+			},
+
+			copyUseLink(data) {
+				uni.setClipboardData({
+					data
+				});
+				// #ifdef MP-ALIPAY
+				this.$refs.uToast.show({
+					message: "内容已复制"
+				})
+				// #endif
+			},
+
+			copyCardNo(data) {
+				uni.setClipboardData({
+					data
+				});
+				// #ifdef MP-ALIPAY
+				this.$refs.uToast.show({
+					message: "内容已复制"
+				})
+				// #endif
+			},
+
+			copyCardPwd(data) {
+				uni.setClipboardData({
+					data
+				});
+				// #ifdef MP-ALIPAY
+				this.$refs.uToast.show({
+					message: "内容已复制"
+				})
+				// #endif
+			},
+
+			copyDeliveryFlowId(data) {
+				uni.setClipboardData({
+					data
+				});
+				// #ifdef MP-ALIPAY
+				this.$refs.uToast.show({
+					message: "内容已复制"
+				})
+				// #endif
+			},
+
+			// 查看物流
+			getLogistics() {
+				uni.navigateTo({
+					url: `/packageGoods/order/logistics?id=${ this.orderId }`
+					// url:`/pages/order/logistics?id=96666733329055749370`
+				});
+			},
+
+			// 确认收货
+			confirmOne() {
+				let orderId = this.orderId
+				uni.showModal({
+					title: '提示',
+					content: '确定已经收到货了吗?',
+					success(res) {
+						if (res.confirm) {
+							$http.post('/api/v1/mp/user/deliver/order/confirm', {
+								orderId
+							}).then(res => {
+								if (res.code == 0) {
+									uni.$u.toast('确认收货成功');
+									setTimeout(() => {
+										uni.navigateBack({
+											delta: 1
+										})
+									}, 500)
+								}
+							})
+						}
+					}
+				})
+			}
+		}
+	}
+</script>
+<style lang="scss" scoped>
+
+	.detail {
+		padding-bottom: 200rpx;
+	}
+
+	// 订单状态
+	.status {
+		position: relative;
+		height: 216rpx;
+
+		image {
+			width: 100%;
+			height: 100%;
+		}
+
+		&-info {
+			position: absolute;
+			top: 0;
+			display: flex;
+			width: 100%;
+			height: 100%;
+			padding: 56rpx 0 0 34rpx;
+
+			image {
+				width: 74rpx;
+				height: 62rpx;
+				margin: 18rpx 22rpx 0 0;
+			}
+
+			&-contet {
+				&-txt {
+					font-size: 38rpx;
+					font-weight: 800;
+					color: #FFFFFF;
+					line-height: 60rpx;
+				}
+
+				&-one {
+					margin-top: 18rpx;
+					height: 62rpx;
+					line-height: 62rpx;
+				}
+
+				&-time {
+					font-size: 30rpx;
+					font-weight: 500;
+					color: #FFFFFF;
+					line-height: 44rpx;
+				}
+			}
+		}
+	}
+
+	// 地址
+	.address {
+		position: relative;
+		margin-top: -34rpx;
+		background-color: #fff;
+		border-radius: 34rpx 34rpx 0 0;
+		z-index: 10;
+		padding-top: 34rpx;
+		margin-bottom: 22rpx;
+
+		&-content {
+			display: flex;
+			align-items: center;
+			// border-top: 1px dashed rgb(254, 143, 62);
+			padding: 18rpx 0 36rpx 34rpx;
+
+			image {
+				width: 30rpx;
+				height: 38rpx;
+				margin-right: 34rpx;
+			}
+
+			&-txt {
+				flex: 1;
+
+				.name {
+					font-size: 30rpx;
+					line-height: 30rpx;
+					margin-bottom: 20rpx;
+
+					text {
+						padding: 0 8rpx;
+						font-size: 26rpx;
+						color: #414141;
+					}
+				}
+
+				.city {
+					color: #999999;
+					line-height: 28rpx;
+				}
+			}
+		}
+	}
+
+	// 商品
+	.goods {
+		padding: 34rpx;
+		background-color: #fff;
+		margin-bottom: 22rpx;
+
+		&-title {
+			font-size: 30rpx;
+			line-height: 30rpx;
+			margin-bottom: 22rpx;
+		}
+
+		// 商品列表
+		&-item {
+			display: flex;
+			padding: 34rpx 32rpx 34rpx 22rpx;
+			box-shadow: 0px 0px 8px 0px rgba(26, 35, 113, 0.08);
+			border-radius: 4rpx;
+			margin-bottom: 20rpx;
+
+			image {
+				width: 176rpx;
+				height: 176rpx;
+				border-radius: 12rpx;
+				margin-right: 22rpx;
+			}
+
+			.info {
+				display: flex;
+				flex-direction: column;
+				justify-content: space-between;
+				flex: 1;
+				padding: 8rpx 0;
+
+				&-title {
+					font-weight: bold;
+					line-height: 40rpx;
+				}
+
+				&-num {
+					justify-content: space-between;
+
+					&-sku {
+						flex: 1;
+						color: #666666;
+						font-size: 26rpx;
+					}
+
+					&-goods {
+						color: #666666;
+						font-size: 26rpx;
+					}
+				}
+			}
+		}
+
+		&-item:last-child {
+			margin-bottom: 0;
+		}
+
+		// 运费
+		&-freight {
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+			padding-bottom: 18rpx;
+			border-bottom: 1px solid #eee;
+			margin-bottom: 20rpx;
+
+			&-title {
+				line-height: 28rpx;
+				color: #999;
+			}
+
+			&-price {
+				line-height: 28rpx;
+			}
+		}
+
+		// 总价
+		&-total {
+			justify-content: flex-end;
+
+			&-price {
+				font-size: 30rpx;
+				color: #F24E4E;
+			}
+		}
+	}
+
+	// 订单信息
+	.order {
+		padding: 34rpx;
+		background-color: #fff;
+		margin-bottom: 22rpx;
+
+		&-title {
+			font-size: 30rpx;
+			line-height: 30rpx;
+			margin-bottom: 22rpx;
+		}
+
+		&-item {
+			justify-content: space-between;
+			margin-bottom: 28rpx;
+
+			&-title {
+				color: #999999;
+				line-height: 28rpx;
+			}
+
+			.tip {
+				line-height: 40rpx;
+			}
+
+			&-content {
+				.copy {
+					height: 100%;
+					margin-left: 8rpx;
+					text-align: center;
+					border-radius: 12rpx;
+					font-size: 24rpx;
+					line-height: 24rpx;
+					padding: 0 6rpx;
+					background-color: rgba(153, 153, 153, .1);
+
+					text {
+						display: inline-block;
+						transform: scale(0.8);
+					}
+				}
+			}
+		}
+
+		&-item:last-child {
+			margin-bottom: 0;
+		}
+	}
+
+	// 发货信息
+	.entire {
+		margin-bottom: 22rpx;
+
+		.order {
+			margin-bottom: 0;
+		}
+
+		&-within {
+			margin-top: 22rpx;
+			background-color: #fff;
+
+			&-info {
+				padding: 34rpx;
+
+				image {
+					width: 176rpx;
+					height: 176rpx;
+					border-radius: 12rpx;
+					margin-right: 22rpx;
+				}
+
+				.info {
+					display: flex;
+					flex-direction: column;
+					justify-content: space-between;
+					flex: 1;
+					padding: 8rpx 0;
+
+					&-title {
+						font-weight: bold;
+						line-height: 40rpx;
+					}
+
+					&-num {
+						text-align: right;
+						color: #666666;
+						font-size: 26rpx;
+						margin-top: 45rpx;
+					}
+				}
+
+			}
+
+			&-info:last-child {
+				border-bottom: none;
+			}
+
+			&-card {
+				padding: 0 34rpx;
+
+				.cardList {
+					border-bottom: 2rpx solid #eee;
+					padding: 20rpx 0 10rpx 0;
+				}
+				.cardList:first-child {
+					border-bottom: none;
+				}
+				.card {
+					color: #999;
+					font-size: 28rpx;
+					line-height: 50rpx;
+					padding-bottom: 10rpx;
+					display: flex;
+					justify-content: space-between;
+
+					&-left {
+						flex: 1.3;
+					}
+
+					&-center {
+						flex: 3;
+						text-align: left;
+						padding-right: 20rpx;
+					}
+
+					&-right {
+						flex: 0.5;
+						text-align: center;
+						height: 40rpx;
+						background: #fff3eb;
+						border: 2rpx solid #FE8E3E;
+						border-radius: 2rpx;
+						color: #F9822C;
+						line-height: 36rpx;
+						font-size: 24rpx;
+					}
+
+          &-righttwo {
+            flex: 0.5;
+          }
+
+				}
+			}
+		}
+
+		&-within:nth-child(2) {
+			margin-top: 0;
+			border-top: 2rpx solid #eee;
+		}
+	}
+
+
+	// 操作按钮
+	.footer-fixed {
+		position: fixed;
+		bottom: var(--window-bottom);
+		left: 0;
+		right: 0;
+		z-index: 11;
+		box-shadow: 0 -4rpx 40rpx 0 rgba(151, 151, 151, 0.24);
+		background: #fff;
+		// 设置ios刘海屏底部横线安全区域
+		padding-bottom: constant(safe-area-inset-bottom);
+		padding-bottom: env(safe-area-inset-bottom);
+
+		.btn {
+			justify-content: flex-end;
+			padding: 20rpx 34rpx;
+
+			&-item {
+				width: 200rpx;
+				height: 66rpx;
+				font-size: 30rpx;
+				border-radius: 33rpx;
+				margin-left: 44rpx;
+
+				text {
+					line-height: 30rpx;
+				}
+			}
+
+			.logistics {
+				border: 1px solid #F9822C;
+				color: #F9822C;
+			}
+
+			.detail {
+				background-color: rgb(249, 130, 44);
+				color: #FFFFFF;
+			}
+
+			.cancel {
+				border: 1px solid #c4c6c9;
+				color: #c4c6c9;
+			}
+
+			.pay {
+				background-color: #5ac725;
+				color: #fff;
+			}
+
+			&-item:first-child {
+				margin-left: 0;
+			}
+		}
+	}
+</style>

+ 1 - 8
src/packageGoods/order/index.vue

@@ -46,7 +46,7 @@
 						<view class="order-list-item-price__total">总金额:<text>¥</text><text>{{ $numberFormat(item.payAmt) }}</text></view>
 					</view>
 					<view class="order-list-item-btn flex">
-						<view class="order-list-item-btn-item flex logistics" v-if="item.status.value == 2 || item.status.value == 3" @click="toLogistics(item)"><text>查看物流</text></view>
+						<view class="order-list-item-btn-item flex logistics" v-if="item.status.value == 2 || item.status.value == 3 && item.type === 1" @click="toLogistics(item)"><text>查看物流</text></view>
 						<view class="order-list-item-btn-item flex cancel" v-if="item.status.value == 0" @click="cancelOrder(item.orderId)"><text>取消订单</text></view>
 						<view class="order-list-item-btn-item flex detail" @click="toDetail(item)"><text>查看详情</text></view>
 						<view class="order-list-item-btn-item flex pay"v-if="item.status.value == 0"  @click="payOrder(item)"><text>去支付</text></view>
@@ -104,14 +104,10 @@
 		},
 		methods: {
 			getList() {
-				uni.showLoading({
-					title: '加载中'
-				});
 				this.loading = true
 				$http.post(`/api/v1/mp/user/deliver/order/list?pageNum=${ this.pageNum }&pageSize=20`, {
 					status: this.status
 				}).then(res => {
-					uni.hideLoading();
 					this.loading = false
 					if (res.code == 0) {
 						res.rows.forEach(item => {
@@ -126,7 +122,6 @@
 						this.list = this.list.concat(res.rows)
 					}
 				}).catch(() => {
-					uni.hideLoading();
 					this.loading = false
 				})
 			},
@@ -269,12 +264,10 @@
 		onReachBottom() {
 			if(this.total < this.pageNum * 20) return ;
 			this.statusNomore = 'loading';
-			// setTimeout(() => {
 			++this.pageNum
 			if(this.total < this.pageNum * 20) this.statusNomore = 'nomore';
 				else this.statusNomore = 'loading';
 			this.getList()
-			// }, 2000)
 		},
 	}
 </script>

+ 1 - 1
src/packageGoods/order/settlement.vue

@@ -450,7 +450,7 @@
 <style lang="scss" scoped>
 	.settlement {
 		margin: 34rpx;
-		padding-bottom: 100rpx;
+		padding-bottom: 150rpx;
 
 		&-address {
 			background-color: #fff;

+ 217 - 0
src/packageGoods/promoters/index.vue

@@ -0,0 +1,217 @@
+<template>
+	<view>
+		<!-- #ifdef MP-ALIPAY -->
+		<u-navbar :placeholder="true" bgColor="#fff" :autoBack="true" :border="true" title="选择盲票天使" leftIconSize="0">
+		</u-navbar>
+		<!-- #endif -->
+		<!-- #ifndef MP-ALIPAY -->
+		<u-navbar :placeholder="true" bgColor="#fff" :autoBack="true" :border="true" title="选择盲票天使"></u-navbar>
+		<!-- #endif -->
+
+		<view class="coupon-title">
+			<u-search placeholder="请输入名字或工号" v-model="searchValue" @blur="pageList()" :showAction="false"></u-search>
+		</view>
+		<view class="coupon-list">
+			<u-radio-group v-model="radiovalue1" placement="column" @change="changeChechk()">
+				<view class="flex coupon-list-item" v-for="(item,index) in list" :key="index">
+					<view class="block">
+						<view class="title">{{item.name}}</view>
+						<text>工号:{{item.workNo}}</text>
+					</view>
+					<view class="uradio">
+						<u-radio :customStyle="{ marginBottom: '8px' }" :name="item.channelId" activeColor="#E96737"
+							size="24">
+						</u-radio>
+					</view>
+				</view>
+				<u-loadmore :line="true" v-if="list.length>20" :status="status" :loading-text="'努力加载中'"
+					:nomore-text="'已经到底了'" />
+			</u-radio-group>
+		</view>
+		<view class="footer-fixed">
+			<view class="flex btn">
+				<button type="default" @click="exchange">确认</button>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import env from '../../config/env.js'
+	import appId from '@/config/appId.js'
+	import $http from '@/utils/request.js'
+	export default {
+		data() {
+			return {
+				pageNum: 1,
+				total: 0,
+				list: [],
+				radiovalue1: '', //选中项的下标
+				channelId: '', //选中项的id
+				id: '', //门店的channelId
+				status: 'nomore', //上拉刷新状态
+				searchValue: '', //搜索
+			};
+		},
+		onShow() {
+			this.pageList()
+		},
+		onLoad(opthios) {
+			if (opthios.channelId) {
+				this.id = opthios.channelId
+				this.channelId = opthios.index
+				this.radiovalue1 = Number(opthios.index) 
+			}
+
+		},
+		methods: {
+			pageList() {
+				this.list = []
+				this.pageNum = 1
+				this.getList()
+			},
+
+			getList() {
+				let _this = this
+				$http.post(`/api/v1/mp/channel/promoter/list?pageNum=${_this.pageNum}&pageSize=20`, {
+					channelId: this.id,
+					searchValue: this.searchValue,
+				}).then(
+					res => {
+						if (res.code == 0) {
+							this.total = res.total
+							this.list = [...this.list, ...res.rows]
+						}
+
+					}).catch(() => {})
+			},
+
+			// 点击切换事件
+			changeChechk(e) {
+				if (this.channelId == e) {
+					this.radiovalue1 = -1
+					this.channelId = ''
+					return
+				} else {
+					this.channelId = e
+					return
+				}
+			},
+
+			// 点击确认事件
+			exchange() {
+				let promoters = {}
+				for (var i = 0; i < this.list.length; i++) {
+					if (this.list[i].channelId == this.channelId) {
+						promoters = {
+							channelId: this.channelId,
+							name: this.list[i].name,
+							workNo: this.list[i].workNo,
+						}
+					}
+				}
+				uni.$emit('promoters', promoters)
+
+				uni.navigateBack({
+					delta: 1
+				})
+			}
+		},
+		onReachBottom() {
+			// 判断是否有数据
+			if (this.total < this.pageNum * 20) return;
+			this.status = 'loading';
+			++this.pageNum
+			if (this.total < this.pageNum * 20) this.status = 'nomore';
+			else this.status = 'loading';
+			this.getList()
+		},
+	}
+</script>
+
+<style lang="scss" scoped>
+	.coupon {
+
+		&-title {
+			position: fixed;
+			z-index: 10;
+			width: 100%;
+			padding: 24rpx 32rpx;
+			background-color: #FFFFFF;
+		}
+
+		&-list {
+			margin-top: 110rpx;
+
+
+			&-item {
+				justify-content: space-between;
+				padding: 20rpx 50rpx;
+				background-color: #FFFFFF;
+				margin-bottom: 20rpx;
+				background-size: 100%;
+
+				.block {
+					color: #333;
+
+					.title {
+						line-height: 60rpx;
+						font-size: 32rpx;
+					}
+
+					text {
+						font-size: 26rpx;
+					}
+				}
+
+
+				.uradio {
+					position: absolute;
+					right: 40rpx;
+				}
+
+				.circle {
+					width: 40rpx;
+					height: 40rpx;
+					border-radius: 50%;
+					border: 1px solid;
+				}
+
+				.action {
+					width: 30rpx;
+					height: 30rpx;
+					border-radius: 50%;
+					background-color: $uni-bg-color;
+				}
+			}
+		}
+	}
+
+	.footer-fixed {
+		position: fixed;
+		bottom: var(--window-bottom);
+		left: 0;
+		right: 0;
+		z-index: 11;
+		box-shadow: 0 -4rpx 40rpx 0 rgba(151, 151, 151, 0.24);
+		background: #fff;
+		// 设置ios刘海屏底部横线安全区域
+		padding-bottom: constant(safe-area-inset-bottom);
+		padding-bottom: env(safe-area-inset-bottom);
+
+		.btn {
+			padding: 20rpx 0;
+
+			::v-deep button {
+				width: 441rpx;
+				height: 88rpx;
+				line-height: 88rpx;
+				font-size: 36rpx;
+				color: #fff;
+				background-color: #F9822C;
+				border: none;
+				border-radius: 44rpx;
+			}
+		}
+	}
+</style>

+ 18 - 25
src/packageGoods/ticket/index.vue

@@ -1,15 +1,18 @@
 <template>
 	<view>
 		<!-- #ifdef MP-ALIPAY -->
-		<u-navbar :placeholder="true" bgColor="#fff" :autoBack="true" :border="true" title="盲票列表" leftIconSize="0">
+		<!-- <u-navbar :placeholder="true" bgColor="#fff" :autoBack="true" :border="true" title="盲票列表" leftIconSize="0"> -->
+		<u-navbar :placeholder="true" bgColor="#fff" :autoBack="true" :border="true" title="商品列表" leftIconSize="0">
 		</u-navbar>
 		<!-- #endif -->
 		<!-- #ifndef MP-ALIPAY -->
-		<u-navbar :placeholder="true" bgColor="#fff" :autoBack="true" :border="true" title="盲票列表"></u-navbar>
+		<u-navbar :placeholder="true" bgColor="#fff" :autoBack="true" :border="true" title="商品列表"></u-navbar>
 		<!-- #endif -->
 		<view class="ticket-box">
 			<view class="flex ticket-box-list">
-				<navigator :url="`/pages/ticketBox/detail?boxId=${ item.boxId }`" class="flex ticket-box-list-item"
+				<!-- <navigator :url="`/pages/ticketBox/detail?boxId=${ item.boxId }`" class="flex ticket-box-list-item"
+					hover-class="navigator-hover" v-for="(item, index) in list" :key="index"> -->
+				<navigator :url="JSON.parse(item.refType).value === 'goods' ? `/packagePrize/goods/index?id=${ item.refId }&boxId=${ item.boxId }`:JSON.parse(item.refType).value === 'coin' ?`/packagePrize/goods/index?id=424`:`/packagePrize/goods/index?id=425`" class="flex ticket-box-list-item"
 					hover-class="navigator-hover" v-for="(item, index) in list" :key="index">
 					<image :src="item.picUrl" mode="aspectFill"></image>
 					<view class="info">
@@ -17,7 +20,7 @@
 						<view class="titletwo">{{ item.title }}</view>
 						<!-- #endif -->
 						<!-- #ifndef MP-ALIPAY -->
-						<view class="title ells-one">{{ item.title }}</view>
+						<view class="titletwo">{{ item.title }}</view>
 						<!-- #endif -->
 
 						<view class="price">¥{{ $numberFormat(item.salePrice) }}</view>
@@ -30,8 +33,10 @@
 			</view>
 			<view class="flex empty" v-if="!list.length">
 				<view class="center">
-					<image class="center-img" src="https://mp-public-1310078123.cos.ap-shanghai.myqcloud.com/v2/nodata_3.png" mode="scaleToFill"></image>
-					<view class="center-font">还没有盲票</view>
+					<image class="center-img"
+						src="https://mp-public-1310078123.cos.ap-shanghai.myqcloud.com/v2/nodata_3.png"
+						mode="scaleToFill"></image>
+					<view class="center-font">还没有商品</view>
 				</view>
 			</view>
 		</view>
@@ -48,7 +53,7 @@
 				pageNum: 1,
 				total: 0,
 				list: [],
-				ids: []
+				ids: [],
 			};
 		},
 		onLoad(options) {
@@ -59,19 +64,16 @@
 		},
 		methods: {
 			getList() {
-				uni.showLoading({
-					title: '加载中'
-				});
 				let data = {
 					categoryId: '',
 					tagId: '',
 					type: 'online',
 					noToken: true,
-					boxIds: this.ids
+					boxIds: this.ids,
+					salePriceSort: 1,
 				}
-				$http.post(`/api/v1/mp/user/mall/ticket/list?pageNum=${this.pageNum}&pageSize=20`, data).then(
+				$http.post(`/api/v1/mp/user/mall/ticket/goods/list?pageNum=${this.pageNum}&pageSize=20`, data).then(
 					res => {
-						uni.hideLoading();
 						if (res.code == 0) {
 							res.rows.forEach(item => {
 								let picUrlArr = item.picUrl.split(',')
@@ -81,7 +83,6 @@
 							this.list = this.list.concat(res.rows)
 						}
 					}).catch(() => {
-					uni.hideLoading();
 				})
 			},
 		},
@@ -89,12 +90,10 @@
 		onReachBottom() {
 			if (this.total < this.pageNum * 20) return;
 			this.status = 'loading';
-			// setTimeout(() => {
 			++this.pageNum
 			if (this.total < this.pageNum * 20) this.status = 'nomore';
 			else this.status = 'loading';
 			this.getList()
-			// }, 2000)
 		},
 	}
 </script>
@@ -129,12 +128,6 @@
 					width: 100%;
 				}
 
-				.title {
-					line-height: 36rpx;
-					font-size: 36rpx;
-					font-weight: bold;
-				}
-
 				.titletwo {
 					width: 100%;
 					line-height: 40rpx;
@@ -160,15 +153,15 @@
 
 		.empty {
 			height: 50vh;
-			
+
 			.center {
 				text-align: center;
-			
+
 				&-img {
 					width: 228rpx;
 					height: 320rpx;
 				}
-			
+
 				&-font {
 					font-size: 30rpx;
 					font-weight: 400;

+ 19 - 17
src/packageOperate/activity/index.vue

@@ -65,7 +65,7 @@
 								:url="JSON.parse(itemTwo.prizeType).value == 'goods' ? `/packagePrize/goods/detail?id=${ itemTwo.refId }`:JSON.parse(itemTwo.prizeType).value == 'coin' ?`/packagePrize/goods/detail?id=424`:`/packagePrize/goods/detail?id=425`"
 								hover-class="none">
 								<view class="effectsthree-width">
-									<image src="../static/activity/effectsthree.png"></image>
+									<image src="../static/activity/effectsthree.png" mode="aspectFit"></image>
 									<view class="effectsthree-width-name">
 										{{item.name}}
 									</view>
@@ -109,7 +109,7 @@
 								<navigator
 									:url="JSON.parse(itemTwo.prizeType).value == 'goods' ? `/packagePrize/goods/detail?id=${ itemTwo.refId }`:JSON.parse(itemTwo.prizeType).value == 'coin' ?`/packagePrize/goods/detail?id=424`:`/packagePrize/goods/detail?id=425`"
 									hover-class="none">
-									<view class="flex">
+									<view class="flex justify">
 										<view>
 											<image :src="itemTwo.picUrl" mode="aspectFit" class="imatwo"></image>
 										</view>
@@ -161,7 +161,7 @@
 			<view class="wrap-account" @click="toWeixin">
 				<view class="wrap-account-view">
 					<image src="../static/activity/logo.png" mode=""></image>
-					<text>关注盲票公众号,获取中奖提醒</text>
+					<text>关注码上快购公众号,获取中奖提醒</text>
 					<view>去关注</view>
 				</view>
 			</view>
@@ -194,12 +194,12 @@
 			</view>
 		</view>
 		<!-- #endif -->
-		<!-- #ifdef H5 || MP-ALIPAY -->
+		<!-- #ifdef H5 -->
 		<view class="footer-fixed">
 			<view class="flex btn">
 				<button type="default" v-if="info.codeType == 1 && info.codeList.length < 1"
 					@click="exChangeCode">立即参与抽奖</button>
-				<button type="default" class="buttoncol" v-else>请在微信“盲票”小程序分享助力</button>
+				<button type="default" class="buttoncol" v-else>请在微信“码上快购”小程序分享助力</button>
 			</view>
 		</view>
 		<!-- #endif -->
@@ -672,8 +672,10 @@
 					// text-align: center;
 					padding: 0 62rpx;
 					justify-content: flex-start;
-
-
+					
+					.justify {
+						justify-content: left;
+					}
 
 					.imatwo {
 						width: 150rpx;
@@ -816,18 +818,18 @@
 			text-align: center;
 
 			&-view {
-				padding: 0 20rpx;
+				padding: 0 10rpx;
 
 				image {
-					width: 64rpx;
-					height: 64rpx;
-					vertical-align: -50%;
+					width: 60rpx;
+					height: 60rpx;
+					vertical-align: -48%;
 				}
 
 				text {
 					line-height: 100rpx;
-					margin: 20rpx;
-					font-size: 30rpx;
+					margin: 20rpx 15rpx;
+					font-size: 28rpx;
 					color: #333333;
 				}
 
@@ -835,10 +837,10 @@
 					text-align: center;
 					border-radius: 6rpx;
 					display: inline-block;
-					height: 44rpx;
-					line-height: 44rpx;
-					font-size: 26rpx;
-					width: 112rpx;
+					height: 40rpx;
+					line-height: 38rpx;
+					font-size: 24rpx;
+					width: 110rpx;
 					color: #f9822c;
 					background-color: #fff;
 					border: 2rpx solid #f9822c;

+ 2 - 2
src/packageOperate/activity/wxofficial.vue

@@ -1,6 +1,6 @@
 <template>
 	<view class="">
-		<web-view src="https://mp.weixin.qq.com/s/AAWN7irBv2Uv_Lkosof1Gw" bindmessage="getMessage"></web-view>
+		<web-view :src="Url" bindmessage="getMessage"></web-view>
 	</view>
 </template>
 
@@ -8,7 +8,7 @@
 	export default {
 		data() {
 			return {
-				
+				Url:`https://mp.weixin.qq.com/s?__biz=Mzk0ODM0NDc1Mg==&mid=2247483763&idx=1&sn=fbbcdb036bf79bb09cb8ab42c605c27f&chksm=c36843acf41fcaba57bfdd6defd0ff07202a7629f184702dcf3d8673da2f0f111b34b327a3bd#rd`
 			}
 		},
 		methods: {

+ 0 - 2
src/packageOperate/address/index.vue

@@ -44,8 +44,6 @@
 				<image class="center-img" src="https://mp-public-1310078123.cos.ap-shanghai.myqcloud.com/v2/nodata_5.png" mode="scaleToFill"></image>
 				<view class="center-font">暂无收货地址</view>
 			</view>
-			<!-- <u-empty text="活动为空" mode="order" /> -->
-		
 		</view>
 		<!-- 底部操作按钮 -->
 		<view class="footer-fixed">

+ 1 - 1
src/packageOperate/process/index.vue

@@ -87,7 +87,7 @@
 
 			toChoice() {
 				uni.redirectTo({
-					url: `/packagePrize/choice/index?id=${ this.info.ticketId }&type=onLine`
+					url: `/packagePrize/choice/index?id=${ this.info.ticketId }&type=online`
 				})
 			},
 		}

Файловите разлики са ограничени, защото са твърде много
+ 0 - 0
src/packageOther/about/conceal.vue


+ 3 - 4
src/packageOther/about/index.vue

@@ -11,17 +11,16 @@
 			<view class="flex about-logo">
 				<image src="../../static/public/logo.png" mode="scaleToFill"></image>
 				<!-- #ifndef MP-ALIPAY -->
-				<view class="edition">v 2.1.10</view>
+				<view class="edition">v 1.0.11</view>
 				<!-- #endif -->
 				<!-- #ifdef MP-ALIPAY -->
-				<view class="edition">v 2.1.25</view>
+				<view class="edition">v 2.2.4</view>
 				<!-- #endif -->
 			</view>
 			<view class="about-action">
 				<u-cell-group :border="false">
 					<u-cell title="隐私保护声明" :isLink="true" :url="'/packageOther/about/conceal'"></u-cell>
-					<u-cell title="用户使用协议" :isLink="true" :url="'/packageOther/about/protect'">
-					</u-cell>
+					<u-cell title="用户使用协议" :isLink="true" :url="'/packageOther/about/protect'"></u-cell>
 				</u-cell-group>
 			</view>
 		</view>

Файловите разлики са ограничени, защото са твърде много
+ 0 - 0
src/packageOther/about/protect.vue


+ 2 - 2
src/packageOther/rule/index.vue

@@ -1,5 +1,5 @@
 <template>
-	<view>
+	<view class="wrap">
 		<!-- #ifdef MP-ALIPAY -->
 		<u-navbar :placeholder="true" bgColor="#fff" :autoBack="true" :border="true" title="盲票产品规则" leftIconSize="0" ></u-navbar>
 		<!-- #endif -->
@@ -39,7 +39,7 @@
 
 <style lang="scss" scoped>
 	.desc {
-		padding: 20rpx 20rpx;
+		padding: 20rpx 20rpx 100rpx 20rpx;
 		background-color: #FFFFFF;
 	}
 </style>

Файловите разлики са ограничени, защото са твърде много
+ 23 - 0
src/packageOther/rule/purchase.vue


+ 213 - 0
src/packagePrize/address/index.vue

@@ -0,0 +1,213 @@
+<template>
+	<view>
+		<!-- #ifdef MP-ALIPAY -->
+		<u-navbar :placeholder="true" bgColor="#fff" :autoBack="true" :border="true" title="使用范围" leftIconSize="0">
+		</u-navbar>
+		<!-- #endif -->
+		<!-- #ifndef MP-ALIPAY -->
+		<u-navbar :placeholder="true" bgColor="#fff" :autoBack="true" :border="true" title="使用范围"></u-navbar>
+		<!-- #endif -->
+
+		<view class="address-wrap">
+			<view class="header-title" @click="selectAddress">
+				<view class="adderss-select">
+					{{ confirm ? confirm : '所有地区' }}
+				</view>
+				<view class="adderss-select-icon">
+					<u-icon name="arrow-right" color="#999" size="12"></u-icon>
+				</view>
+			</view>
+			<view class="content">
+				<view class="address-box" v-for="(item,index) in list" :key="index">
+					<text class="store-name" selectable="true" user-select={true}>{{item.siteName}}</text>
+					<view class="store-address">
+						<text>地址:{{item.addressAll}}</text>
+						<view @click="copyDeliveryFlowId(item.addressAll)">复制</view>
+					</view>
+				</view>
+			</view>
+			<u-loadmore :line="true" v-if="list.length>10" :status="status" :loading-text="'努力加载中'"
+				:nomore-text="'已经到底了'" />
+		</view>
+		<view class="flex empty" v-if="!list.length">
+			<view class="center">
+				<image class="center-img"
+					src="https://mp-public-1310078123.cos.ap-shanghai.myqcloud.com/v2/nodata_5.png" mode="scaleToFill">
+				</image>
+				<view class="center-font">暂无门店</view>
+			</view>
+		</view>
+		<u-toast ref="uToast"></u-toast>
+		<address-popup :address-show="addressShow" @cancel="cancel" @confirmAddress="confirmAddress" />
+	</view>
+</template>
+
+<script>
+	import $http from '@/utils/request.js'
+	import AddressPopup from '../components/address-popup/address-popup.vue'
+	export default {
+		components: {
+			AddressPopup
+		},
+		data() {
+			return {
+				list: [],
+				couponId: null,
+				addressShow: false,
+				confirm: '',
+				info: {},
+				total: 0,
+				pageNum: 1,
+				status: 'nomore', //上拉刷新状态
+			};
+		},
+		onLoad(options) {
+			this.couponId = options.couponId
+			this.pageList()
+		},
+		methods: {
+			pageList() {
+				this.pageNum = 1
+				this.total = 0
+				this.list = []
+				this.getList()
+			},
+			getList() {
+				uni.showLoading({
+					title: '加载中'
+				});
+				$http.post(`/api/v1/mp/user/mine/coupon/channel/list?pageNum=${this.pageNum}&pageSize=20`, { ...this.info,
+					couponId: this.couponId }).then(
+					res => {
+						uni.hideLoading();
+						if (res.code == 0) {
+							this.list = this.list.concat(res.rows)
+							this.list.forEach(item => {
+								item.addressAll = `${item.province} ${item.city} ${item.area} ${item.address}`
+							})
+							this.total = res.total
+						}
+					}).catch(() => {
+					uni.hideLoading();
+				})
+			},
+			selectAddress() {
+				this.addressShow = true
+			},
+			cancel() {
+				this.addressShow = false
+			},
+			confirmAddress(obj) {
+				this.info = {
+					provinceId: obj.provinceId,
+					cityId: obj.cityId,
+				}
+				this.confirm = obj.cityShow
+				this.addressShow = false
+				this.pageList()
+			},
+			copyDeliveryFlowId(data) {
+				uni.setClipboardData({ data });
+				// #ifdef MP-ALIPAY
+				this.$refs.uToast.show({ message: "内容已复制" })
+				// #endif
+			},
+		},
+		onReachBottom() {
+			if (this.total < this.pageNum * 20) return;
+			this.status = 'loading';
+			++this.pageNum
+			if (this.total < this.pageNum * 20) this.status = 'nomore';
+			else this.status = 'loading';
+			this.getList()
+		},
+	}
+</script>
+
+<style lang="scss" scoped>
+	.address-wrap {
+
+		.header-title {
+			background-color: #fff;
+			padding: 0 20rpx;
+			display: flex;
+			height: 90rpx;
+			box-shadow: 0 5rpx 5rpx #ececec;
+			line-height: 90rpx;
+
+			.adderss-select {
+				margin-right: 10rpx;
+				font-size: 30rpx;
+			}
+
+			.adderss-select-icon {
+				display: inline-block;
+				margin-top: 34rpx;
+			}
+		}
+
+		.content {
+			margin: 20rpx 10rpx;
+			padding: 0 25rpx;
+			border-radius: 12rpx;
+			background-color: #fff;
+
+			.address-box {
+				width: 100%;
+				padding: 30rpx 0;
+				border-bottom: 2rpx solid #dadbde;
+
+				.store-name {
+					font-size: 30rpx;
+					color: #000;
+					margin-bottom: 15rpx;
+				}
+
+				.store-address {
+
+					text {
+						font-size: 24rpx;
+						color: #999;
+					}
+
+					view {
+						margin-left: 8rpx;
+						background-color: rgba(153, 153, 153, .1);
+						display: inline-block;
+						width: 80rpx;
+						height: 40rpx;
+						line-height: 34rpx;
+						text-align: center;
+						font-size: 24rpx;
+						border-radius: 8rpx;
+					}
+				}
+			}
+
+			.address-box:last-child {
+				border-bottom: none;
+			}
+		}
+
+	}
+
+	.empty {
+		height: 60vh;
+
+		.center {
+			text-align: center;
+
+			&-img {
+				width: 228rpx;
+				height: 320rpx;
+			}
+
+			&-font {
+				font-size: 30rpx;
+				font-weight: 400;
+				color: #999999;
+				margin-bottom: 250rpx;
+			}
+		}
+	}
+</style>

+ 0 - 7
src/packagePrize/bean/index.vue

@@ -57,16 +57,11 @@
 		},
 		methods: {
 			getBean() {
-				uni.showLoading({
-					title: '加载中'
-				});
 				$http.post('/api/v1/mp/user/mine/init', {}).then(res => {
-					uni.hideLoading();
 					if (res.code == 0) {
 						this.initData = res.data
 					}
 				}).catch(() => {
-					uni.hideLoading();
 				})
 			},
 
@@ -105,12 +100,10 @@
 		onReachBottom() {
 			if(this.total < this.pageNum * 50) return ;
 			this.status = 'loading';
-			// setTimeout(() => {
 			++this.pageNum
 			if(this.total < this.pageNum * 50) this.status = 'nomore';
 				else this.status = 'loading';
 			this.getList()
-			// }, 2000)
 		},
 	}
 </script>

+ 9 - 6
src/packagePrize/choice/index.vue

@@ -11,9 +11,9 @@
 		<view class="choice">
 			<!-- 返回 -->
 			<!-- #ifndef MP-ALIPAY -->
-			<view class="choice-navLeft flex" :style="{ top: statusHeight + 'px' }" @click="back">
+			<!-- <view class="choice-navLeft flex" :style="{ top: statusHeight + 'px' }" @click="back">
 				<u-icon size="19" color="#fff" name="arrow-left"></u-icon>
-			</view>
+			</view> -->
 			<!-- #endif -->
 			
 			<!-- 标题 -->
@@ -80,9 +80,12 @@
 					</view>
 				</view>
 			</view>
-			<view class="choice-tip flex" @click="again" v-if="comfirmShow">
+			<view class="choice-tip flex" @click="again" v-if="comfirmShow && type == 'offline'">
 				<view class="txt">再来一张</view>
 			</view>
+			<view class="choice-tip flex" @click="again" v-if="comfirmShow && type == 'online'">
+				<view class="txt">再买一个</view>
+			</view>
 		</view>
 		
 		<!-- 详情 -->
@@ -120,7 +123,6 @@
 		},
 		onLoad(options) {
 			this.ticketId = options.id
-			this.type = options.type
 			
 			// #ifdef MP-WEIXIN
 			const res = uni.getMenuButtonBoundingClientRect()
@@ -139,6 +141,7 @@
 				$http.post('/api/v1/mp/user/ticket/queryHitPrizeList', data).then(res => {
 					uni.hideLoading();
 					if (res.code == 0) {
+						this.type = res.data.type
 						res.data.prizeList.forEach(item => {
 							let picUrlArr = item.picUrl.split(',')
 							item.picUrl = env.filePublic + picUrlArr[0] + '?imageView2/2/w/340'
@@ -305,7 +308,7 @@
 			
 			again() {
 				let _this = this
-				if(this.type == 'onLine') {
+				if(this.type == 'online') {
 					uni.switchTab({
 						url: '/pages/index/index'
 					})
@@ -316,7 +319,7 @@
 							const url = res.result
 							let serialNo = urlParameter(url).id
 							uni.redirectTo({
-								url: `/pages/lucky/index?id=${ serialNo }&type=offLine`
+								url: `/pages/lucky/index?id=${ serialNo }&type=offline`
 							})
 						},
 						fail() {

+ 91 - 0
src/packagePrize/components/address-popup/address-popup.vue

@@ -0,0 +1,91 @@
+<template>
+	<view>
+		<u-popup :show="addressShow" @close="cancel">
+			<view class="flex warp">
+				<view class="warp-left" @click="cancel"> 取消 </view>
+				<view class="warp-right" @click="setArea"> 确定 </view>
+			</view>
+			<picker-view style="height: 500rpx; text-align: center; line-height: 68rpx;" :value="value" @change="bindChange">
+				<picker-view-column>
+					<view v-for="(item,index) in provinceRes" :key="index">{{item.areaName}}</view> 
+				</picker-view-column>
+				<picker-view-column>
+					<view v-for="(item,index) in cityRes" :key="index">{{item.areaName}}</view> 
+				</picker-view-column>
+			</picker-view>
+		</u-popup>
+	</view>
+</template>
+
+<script>
+	import $http from '@/utils/request.js'
+	export default {
+		name: "area-picker",
+		props: {
+			addressShow: {
+				type: [Boolean],
+				default: false
+			},
+		},
+		data() {
+			return {
+				value: [0,0],//所选下标
+				provinceRes: [],//省
+				cityRes: [],//市
+			};
+		},
+		mounted() {
+			this.getArea()
+		},
+		methods: {
+			//切换
+			bindChange(e){
+				if(e.detail.value[0] != this.value[0]){
+					this.cityRes = this.provinceRes[e.detail.value[0]].cityList
+					this.value = [e.detail.value[0],0]
+					return
+				}else{
+					this.value = e.detail.value
+					return
+				}
+			},
+			//确定修改
+			setArea() {
+				let confirmObj = {
+					province: this.provinceRes[this.value[0]].areaName,
+					provinceId: this.provinceRes[this.value[0]].areaId,
+					city: this.cityRes[this.value[1]].areaName,
+					cityId: this.cityRes[this.value[1]].areaId,
+					cityShow: `${ this.provinceRes[this.value[0]].areaName } / ${ this.cityRes[this.value[1]].areaName  }`
+				}
+				this.$emit('confirmAddress', confirmObj)
+			},
+			getArea() {
+				$http.post('/api/v1/mp/admin/area/tree/list', {}).then(res=>{
+					res.data.unshift({areaId:null,areaName:'所有地区',cityList:[{areaId:null,areaName:''}]})
+					this.provinceRes = res.data
+					this.cityRes = res.data[0].cityList
+				})
+			},
+			cancel() {
+				this.$emit('cancel')
+			},
+		},
+	}
+</script>
+
+<style lang="scss">
+	.warp {
+		justify-content: space-between;
+		padding: 15px;
+		
+		&-left {
+			 color: #909193;
+			 font-size: 30rpx;
+		}
+		&-right {
+			 color: #3c9cff;
+			 font-size: 30rpx;
+		}
+	}
+</style>

+ 78 - 26
src/packagePrize/coupon/detail.vue

@@ -1,12 +1,13 @@
 <template>
 	<view>
 		<!-- #ifdef MP-ALIPAY -->
-		<u-navbar :placeholder="true" bgColor="#fff" :autoBack="true" :border="true" title="优惠券详情" leftIconSize="0"></u-navbar>
+		<u-navbar :placeholder="true" bgColor="#fff" :autoBack="true" :border="true" title="优惠券详情" leftIconSize="0">
+		</u-navbar>
 		<!-- #endif -->
 		<!-- #ifndef MP-ALIPAY -->
 		<u-navbar :placeholder="true" bgColor="#fff" :autoBack="true" :border="true" title="优惠券详情"></u-navbar>
 		<!-- #endif -->
-		
+
 		<view class="detail">
 			<!-- 优惠券信息 -->
 			<view class="flex detail-item">
@@ -31,28 +32,45 @@
 					</view>
 					<view class="content-right flex">
 						<view class="title ells-one">{{ info.title }}</view>
-						<view class="desc">适用范围:{{ info.useAreaDesc || '-' }}</view>
-						<view class="desc">使用期限:{{ $parseTime(info.validStart, '{y}.{m}.{d}') }} ~ {{ $parseTime(info.validEnd, '{y}.{m}.{d}') }}</view>
+						<view class="desc"
+							v-if="info.type && JSON.parse(info.type).value == 2 && info.useArea && JSON.parse(info.useArea).value == 1">
+							适用范围:点击查看</view>
+						<view class="desc"
+							v-else-if="info.type && JSON.parse(info.type).value == 2 && info.useArea && JSON.parse(info.useArea).value == 0">
+							适用范围:点击查看</view>
+						<view class="desc" v-else>适用范围:{{ info.useAreaDesc || '-' }}</view>
+						<view class="desc">使用期限:{{ $parseTime(info.validStart, '{y}.{m}.{d}') }} ~
+							{{ $parseTime(info.validEnd, '{y}.{m}.{d}') }}</view>
 					</view>
 				</view>
 			</view>
-			
+
 			<!-- 间隔 -->
 			<view class="detail-interval flex">
 				<view class="detail-interval__left"></view>
 				<view class="detail-interval__line"></view>
 				<view class="detail-interval__right"></view>
 			</view>
-				
+
 			<!-- 二维码 -->
-			<view class="flex detail-code" v-if = "info && info.useArea && JSON.parse(info.useArea).value  != 4">
+			<view class="flex detail-code" v-if="info && info.useArea && JSON.parse(info.useArea).value  != 4">
 				<canvas style="width: 220px;height: 220px;" canvas-id="couponQrcode" id="couponQrcode"></canvas>
 			</view>
-			
+			<!-- 范围 -->
+			<view class="detail-explain" v-if="info && info.useArea && JSON.parse(info.useArea).value  == 1">
+				<view class="txt">使用范围:</view>
+				<view class="txt detail">共{{info.channelTotal}}家门店可使用 <view class="detail-address" @click="toAddress">立即查看</view>
+				</view>
+			</view>
+			<view class="detail-explain" v-if="info && info.useArea && JSON.parse(info.useArea).value  == 0">
+				<view class="txt">使用范围:</view>
+				<view class="txt detail">共{{info.channelTotal}}家门店可使用 <view class="detail-address" @click="toAddress">立即查看</view>
+				</view>
+			</view>
 			<!-- 说明 -->
 			<view class="detail-explain">
 				<view class="txt">使用说明:</view>
-				<view class="txt">{{ info.description }}</view>
+				<view class="txt detail" v-html="info.description" style="white-space: pre-wrap;"></view>
 			</view>
 		</view>
 	</view>
@@ -60,6 +78,7 @@
 
 <script>
 	import $http from '@/utils/request.js'
+	import parse from 'mini-html-parser2';
 	const qrCode = require('@/common/weapp-qrcode.js')
 	export default {
 		data() {
@@ -82,6 +101,16 @@
 				}).then(res => {
 					uni.hideLoading();
 					if (res.code == 0) {
+						// #ifndef MP-ALIPAY
+						res.data.description = res.data.description.replaceAll('\n','<br/>')
+						// #endif
+						// #ifdef MP-ALIPAY
+						parse(res.data.description,(err,nodes) => {
+							if(!err){
+								res.data.description = nodes
+							}
+						})
+						// #endif
 						this.info = res.data
 						setTimeout(() => {
 							uni.hideLoading();
@@ -92,6 +121,12 @@
 					uni.hideLoading();
 				})
 			},
+			//地址
+			toAddress() {
+				uni.navigateTo({
+					url:`/packagePrize/address/index?couponId=${this.info.couponId}`,
+				})
+			},
 			// 二维码生成工具
 			couponQrCode() {
 				new qrCode('couponQrcode', {
@@ -108,47 +143,47 @@
 </script>
 
 <style lang="scss" scoped>
+	
 	.detail {
 		margin: 20rpx;
 		background-color: #FFFFFF;
 		border-radius: 10rpx;
 		overflow: hidden;
-		
+
 		// 优惠券信息
 		&-item {
 			padding: 30rpx 0 30rpx;
 			background-color: #fff;
-			
+
 			.content {
 				width: 100%;
 				height: 184rpx;
 				justify-content: flex-start;
-				
+
 				&-left {
 					width: 210rpx;
 					height: 100%;
 					margin-right: 20rpx;
-					
+
 					image {
 						width: 100%;
 						height: 100%;
 					}
-					
+
 					.price {
 						position: absolute;
 						color: #fff;
-						
+
 						text:first-child {
-							font-size: 70rpx;
-							padding-right: 20rpx;
+							font-size: 45rpx;
 						}
-						
+
 						text:last-child {
 							font-size: 40rpx;
 						}
 					}
 				}
-				
+
 				&-right {
 					flex: 1;
 					align-items: flex-start;
@@ -156,7 +191,7 @@
 					justify-content: space-between;
 					height: 100%;
 					padding: 24rpx 0;
-					
+
 					.title {
 						font-size: 32rpx;
 						line-height: 32rpx;
@@ -164,7 +199,7 @@
 						overflow: hidden;
 						font-weight: bold;
 					}
-					
+
 					.desc {
 						font-size: 24rpx;
 						line-height: 24rpx;
@@ -180,7 +215,7 @@
 			width: 100%;
 			height: 30rpx;
 			margin-bottom: 10rpx;
-			
+
 			&__left {
 				position: absolute;
 				left: -15rpx;
@@ -189,13 +224,13 @@
 				background: #F9F7F5;
 				border-radius: 50%;
 			}
-			
+
 			&__line {
 				height: 1px;
 				background-color: #F9F7F5;
 				width: 90%;
 			}
-			
+
 			&__right {
 				position: absolute;
 				right: -15rpx;
@@ -205,19 +240,36 @@
 				border-radius: 50%;
 			}
 		}
-		
+
 		// 二维码
 		&-code {
 			width: 100%;
 			height: 460rpx;
 			margin-bottom: 20rpx;
 		}
-		
+
 		// 说明
 		&-explain {
 			font-size: 26rpx;
 			padding: 0 34rpx 34rpx;
 
+			.detail {
+				margin-left: 20rpx;
+
+				&-address {
+					margin-left: 20rpx;
+					display: inline-block;
+					width: 150rpx;
+					height: 40rpx;
+					color: #FE9E48;
+					border: 2rpx solid #FE9E48;
+					text-align: center;
+					line-height: 36rpx;
+					font-size: 24rpx;
+					border-radius: 8rpx;
+				}
+			}
+
 			.txt {
 				line-height: 40rpx;
 			}

+ 0 - 7
src/packagePrize/coupon/use.vue

@@ -80,14 +80,10 @@
 			getList() {
 				let _this = this
 				let url = '/api/v1/mp/user/mine/coupon/list'
-				uni.showLoading({
-					title: '加载中'
-				});
 				this.loading = true
 				$http.post(`${ url }?pageNum=${_this.pageNum}&pageSize=20`, {
 					status: this.state
 				}).then(res => {
-					uni.hideLoading();
 					this.loading = false
 					if (res.code == 0) {
 						res.rows.forEach(item => {
@@ -99,7 +95,6 @@
 						_this.list = _this.list.concat(res.rows)
 					}
 				}).catch(() => {
-					uni.hideLoading();
 					this.loading = false
 				})
 			},
@@ -127,12 +122,10 @@
 		onReachBottom() {
 			if(this.total < this.pageNum * 20) return ;
 			this.status = 'loading';
-			// setTimeout(() => {
 			++this.pageNum
 			if(this.total < this.pageNum * 20) this.status = 'nomore';
 				else this.status = 'loading';
 			this.getList()
-			// }, 2000)
 		},
 	}
 </script>

+ 333 - 0
src/packagePrize/goods/index.vue

@@ -0,0 +1,333 @@
+<template>
+	<view>
+		<!-- #ifdef MP-ALIPAY -->
+		<u-navbar :placeholder="true" bgColor="#fff" :autoBack="true" :border="true" title="商品详情" leftIconSize="0">
+		</u-navbar>
+		<!-- #endif -->
+		<!-- #ifndef MP-ALIPAY -->
+		<u-navbar :placeholder="true" bgColor="#fff" :autoBack="true" :border="true" title="商品详情"></u-navbar>
+		<!-- #endif -->
+
+		<view class="detail">
+			<view class="detail-swiper">
+				<u-swiper :list="picUrlArr" height="375" radius="0" :indicator="true" :circular="true"
+					indicatorMode="dot" indicatorActiveColor="#FA822C"></u-swiper>
+			</view>
+			<!-- 详情 -->
+			<view class="detail-info">
+				<view class="detail-info-left">
+					<view class="detail-info-left__title ells">{{ info.title }}</view>
+				</view>
+				<view class="detail-infotwo flex">
+					<view class="detail-infotwo-num">
+						<view class="">¥{{ $numberFormat(info.value) }}</view>
+						<view class="txt" v-if="info.originPrice">¥<text>{{ info.originPrice }}</text></view>
+					</view>
+					<view class="detail-info-right"></view>
+				</view>
+
+			</view>
+			<view class="detail-goods">产品介绍</view>
+			<view class="detail-description">
+				<u-parse :content="description" :selectable="true"></u-parse>
+			</view>
+			<view style="detail-merchant" @click="toCompanyData" v-if="info.merchantInfo?true:false">
+				<view class="detail-merchant-warp">
+					<view class="detail-merchant-warp-one">商家信息</view>
+					<view class="detail-merchant-warp-two">
+						<view style="float: left;">前往查看</view>
+						<u-icon style="float: right;" name="arrow-right" size="18"></u-icon>
+					</view>
+				</view>
+			</view>
+		</view>
+		<view class="footer-fixed">
+			<view class="footer-fixed-content flex">
+				<view class="footer-fixed-content__price" >
+					<button @click="exchange">立即购买</button>
+				</view>
+			</view>
+		</view>
+		<!-- 支付弹框组件 -->
+		<pay-popup :pay-show="payShow" :pay-info="payInfo" @close="close" @success="toProcess" v-if="payShow" />
+	</view>
+</template>
+
+<script>
+	import env from '../../config/env.js'
+	import $http from '@/utils/request.js'
+	import appId from '@/config/appId.js'
+	import { formatRichText } from '@/utils/util.js'
+	import PayPopup from '../../components/pay-popup/pay-popup.vue'
+	export default {
+		components: {
+			PayPopup,
+		},
+		data() {
+			return {
+				boxId: '',
+				picUrlArr: [],
+				info: {},
+				prizeList: [],
+				description: '',
+				goodsId: '',
+
+				payShow: false,
+				payInfo: {},
+				purchasePopupShow: false
+			};
+		},
+		onLoad(opthios) {
+			this.getDetail(opthios.id)
+			this.goodsId = opthios.id
+			this.boxId = opthios.boxId
+		},
+		methods: {
+			getDetail(id) {
+				uni.showLoading({
+					title: '加载中'
+				});
+				$http.post('/api/v1/mp/user/exchange/goods/detail', {
+					noToken: true,
+					goodsId: id
+				}).then(res => {
+					uni.hideLoading();
+					if (res.code == 0) {
+						this.info = res.data
+						let picUrlArr = res.data.picUrl.split(',')
+						picUrlArr.forEach(item => {
+							this.picUrlArr.push(env.filePublic + item + '?imageView2/2/w/750')
+						})
+						// 处理富文本
+						// #ifndef MP-ALIPAY
+						const description = res.data.description.replaceAll(".jpg\"", ".jpg?imageView2/2/w/750\"")
+							.replaceAll(".jpeg\"", ".jpeg?imageView2/2/w/750\"").replaceAll(".png\"",
+								".png?imageView2/2/w/750\"");
+						this.description = formatRichText(description);
+						// #endif
+
+						// #ifdef MP-ALIPAY
+						res.data.description.split(".jpg\"").join(".jpg?imageView2/2/w/750\"")
+						res.data.description.split(".jpeg\"").join(".jpeg?imageView2/2/w/750\"")
+						res.data.description.split(".png\"").join(".png?imageView2/2/w/750\"")
+						this.description = formatRichText(res.data.description);
+						// #endif
+
+					}
+				}).catch(() => {
+					uni.hideLoading();
+				})
+			},
+
+			close() {
+				this.payShow = false
+			},
+			toProcess(id) {
+				this.payShow = false
+				uni.navigateTo({
+					url: `/packagePrize/purchase/index?boxId=${ this.boxId }&orderId=${ id }&isTry=0`
+				})
+			},
+			
+			exchange() {
+				console.log(this.info);
+				let data = {
+					couponIds: [],
+					autoCoupon: 1,
+					boxId: this.boxId,
+					orderNum: 1,
+					appSource: appId
+				}
+				$http.post('/api/v1/mp/user/ticket/order/settle', data).then(res => {
+					if (res.code == 0) {
+						let info = {
+							...res.data,
+							...this.info,
+							picUrl: env.filePublic + res.data.goodsPicUrl.split(',')[0],
+						}
+						this.payInfo = info
+						this.payShow = true
+					}
+				})
+			},
+
+			toCompanyData() {
+				uni.navigateTo({
+					url: `/packageGoods/goods/company?goodsId=${ this.goodsId }`
+				})
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.detail {
+		// 设置ios刘海屏底部横线安全区域
+		// padding-bottom: constant(safe-area-inset-bottom);
+		// padding-bottom: env(safe-area-inset-bottom);
+		padding-bottom: 210rpx;
+		// 商品轮播
+		&-swiper {
+			background-color: #FFFFFF;
+		}
+
+		// 详情
+		&-infotwo {
+			background-color: #fff;
+			justify-content: space-between;
+
+			&-num {
+				view {
+					display: inline-block;
+					color: #F9822C;
+					line-height: 80rpx;
+					font-size: 32rpx;
+					font-weight: bold;
+				}
+
+				.txt {
+					margin-left: 14rpx;
+					font-size: 26rpx;
+					color: #666666;
+					font-weight: 400;
+					text-decoration: line-through;
+				}
+			}
+
+		}
+
+		&-info {
+			background-color: #fff;
+			justify-content: space-between;
+			padding: 34rpx;
+			margin-bottom: 22rpx;
+
+			&-left {
+				flex: 1;
+
+				&__title {
+					font-size: 34rpx;
+					line-height: 40rpx;
+					max-height: 80rpx;
+					overflow: hidden;
+					// margin-bottom: 26rpx;
+					font-weight: bold;
+				}
+
+				&__coin {
+					display: flex;
+					line-height: 30rpx;
+					margin-bottom: 26rpx;
+
+					.content {
+						color: #FA822C;
+						margin-right: 34rpx;
+						font-weight: bold;
+						font-size: 30rpx;
+
+						image {
+							width: 34rpx;
+							height: 30rpx;
+						}
+
+						text {
+							font-weight: normal;
+						}
+					}
+
+					.txt {
+						font-size: 26rpx;
+						color: #666666;
+						text-decoration: line-through;
+					}
+				}
+
+				&__price {
+					line-height: 24rpx;
+					color: #666666;
+				}
+			}
+
+			&-right {
+				color: #666666;
+			}
+		}
+
+		&-goods {
+			height: 90rpx;
+			text-align: center;
+			line-height: 90rpx;
+			font-weight: bold;
+			font-size: 30rpx;
+			background-color: #FFFFFF;
+		}
+
+		&-description {
+			image {
+				width: 100%;
+			}
+		}
+
+		&-merchant {
+			height: 88rpx;
+			// text-align: center;
+			line-height: 88rpx;
+			font-weight: bold;
+			background-color: #FFFFFF;
+
+			&-warp {
+				height: 88rpx;
+				width: 100%;
+				background-color: #ffffff;
+
+				&-one {
+					float: left;
+					margin: 20rpx;
+					font-weight: 600;
+				}
+
+				&-two {
+					float: right;
+					margin: 20rpx;
+					font-weight: 600;
+				}
+			}
+		}
+
+		
+	}
+
+	.footer-fixed {
+		position: fixed;
+		bottom: var(--window-bottom);
+		left: 0;
+		right: 0;
+		z-index: 11;
+		box-shadow: 0 -4rpx 40rpx 0 rgba(151, 151, 151, 0.24);
+		background: #fff;
+		// 设置ios刘海屏底部横线安全区域
+		padding-bottom: constant(safe-area-inset-bottom);
+		padding-bottom: env(safe-area-inset-bottom);
+
+		&-content {
+			justify-content: space-around;
+			height: 132rpx;
+			background-color: #fff;
+
+			&__price {
+
+				button {
+					line-height: 82rpx;
+					width: 420rpx;
+					height: 82rpx;
+					font-size: 30rpx;
+					background: #F9822C;
+					border-radius: 20px;
+					color: #fff;
+					margin-right: 20rpx;
+				}
+
+			}
+		}
+	}
+</style>

+ 32 - 28
src/packagePrize/prize/index.vue

@@ -24,8 +24,6 @@
 			</u-navbar>
 		</view>
 		<!-- #endif -->
-		
-
 		<!-- 奖品选择 -->
 		<view class="prize-state">
 			<!-- 类型 -->
@@ -66,7 +64,8 @@
 							<view class="desc flex">
 								<view class="ells title">{{ item.title }}</view>
 								<view class="num flex">
-									<view class="sku ells-one">规格:{{ item.properties || '-' }}</view>
+									<view class="sku ells-one" v-if="item.goodsType === 1">规格:{{ item.properties || '-' }}</view>
+									<view class="sku ells-one" v-else></view>
 									<view class="">共{{ item.goodsNum }}件</view>
 								</view>
 							</view>
@@ -75,7 +74,8 @@
 					<!-- 来源 -->
 					<view class="prize-goods-list-item__btn flex" v-if="item.status == 1">
 						<view class="type">来自:{{ item.inType && item.inType.desc }}</view>
-						<!-- <view class="btn" @click="toRecovery(item)" v-if="item.inType.value == '1' || item.inType.value == '2'">兑换盲豆</view> -->
+						<view class="btn" @click="toRecovery(item)" v-if="item.inType.value == '1' && item.recovery && item.discountRate > 0">兑换盲豆</view>
+						<view class="btn" @click="toRecovery(item)" v-else-if="item.inType.value == '1' && item.type.value == 'offline' && item.discountRate > 0">兑换盲豆</view>
 					</view>
 					<view class="prize-goods-list-item__btn flex" v-else>
 						<view class="type"></view>
@@ -105,7 +105,9 @@
 						</view>
 						<view class="content-right flex">
 							<view class="title ells-one">{{ item.title }}</view>
-							<view class="desc">适用范围:{{ item.useAreaDesc || '-' }}</view>
+							<view class="desc" v-if="item.type && JSON.parse(item.type).value == 2 && item.useArea && JSON.parse(item.useArea).value == 1">适用范围:点击查看</view>
+							<view class="desc" v-else-if="item.type && JSON.parse(item.type).value == 2 && item.useArea && JSON.parse(item.useArea).value == 0">适用范围:点击查看</view>
+							<view class="desc" v-else>适用范围:{{ item.useAreaDesc || '-' }}</view>
 							<view class="desc">使用期限:{{ $parseTime(item.validStart, '{y}.{m}.{d}') }} ~ {{ $parseTime(item.validEnd, '{y}.{m}.{d}') }}</view>
 						</view>
 					</view>
@@ -185,7 +187,7 @@
 				status: 'nomore',//上拉刷新状态
 				loading: false,
 				stateArr: [{
-					name: ' 实物商品',
+					name: ' 商品',
 				}, {
 					name: ' 优惠券',
 				}],
@@ -242,13 +244,9 @@
 				let data = _this.state == 0 ? { } : {
 					status: 1
 				}
-				uni.showLoading({
-					title: '加载中'
-				});
 				this.loading = true
 				this.checkedAll = false
 				$http.post(`${ url }?pageNum=${_this.pageNum}&pageSize=20`, data).then(res => {
-					uni.hideLoading();
 					this.loading = false
 					if (res.code == 0) {
 						res.rows.forEach(item => {
@@ -258,13 +256,13 @@
 							if (_this.state == 0) {
 								item.checked = false
 								item.inType = JSON.parse(item.inType)
+								item.type = JSON.parse(item.type)
 							}
 						})
 						_this.total = res.total
 						_this.list = _this.list.concat(res.rows)
 					}
 				}).catch(() => {
-					uni.hideLoading();
 					this.loading = false
 				})
 			},
@@ -412,7 +410,11 @@
 						}
 					})
 				}
-				this.$set(item, 'checked', e)
+				let bool = this.list.every(res => res.checked ? item.goodsType == res.goodsType : item.goodsType)
+				if(!bool && e == true) {
+					uni.$u.toast('实物商品和卡密商品不能同时提货')
+				}
+        this.$set(item, 'checked', e)
 				let flag = this.list.every(item => item.checked == true)
 				this.checkedAll = flag
 				this.$forceUpdate()
@@ -436,6 +438,20 @@
 			// 立即提货
 			toSettlement() {
 				let arr = []
+        this.list.forEach(item => {
+          if (item.checked) {
+            arr.push(item)
+          }
+        })
+        if (!arr.length) {
+          uni.$u.toast('请选择商品');
+          return
+        }
+        let bool = this.list.every(res => res.checked ? arr[0].goodsType === res.goodsType : arr[0].goodsType)
+        if(!bool){
+          uni.$u.toast('实物商品和卡密商品不能同时提货');
+          return;
+        }
 				for (var i = 0; i < this.list.length; i++) {
 					//选中 && 是多sku && 不为盲豆兑换 && sku为空
 					if(this.list[i].checked && this.list[i].isMoreSku == 1 && this.list[i].inType.value != 2 && this.list[i].properties == ""){
@@ -478,15 +494,6 @@
 							})
 						return
 					}
-				} 
-				this.list.forEach(item => {
-					if (item.checked) {
-						arr.push(item)
-					}
-				})
-				if (!arr.length) {
-					uni.$u.toast('请选择商品');
-					return
 				}
 				uni.showLoading({
 					title: '提货中'
@@ -507,7 +514,7 @@
 					}).then(data => {
 						if (res.code == 0) {
 							this.stateArr = [{
-									name: ' 实物商品 (' + res.total + ') '
+									name: ' 商品 (' + res.total + ') '
 								},
 								{
 									name: ' 优惠券 (' + data.total + ') '
@@ -515,7 +522,7 @@
 							]
 						} else {
 							this.stateArr = [{
-									name: ' 实物商品 (0)'
+									name: ' 商品 (0)'
 								},
 								{
 									name: ' 优惠券 (0)'
@@ -558,7 +565,7 @@
 					}
 
 					// 4为线下票使用
-					if (useArea.value == 4 || useArea.value == 4) {
+					if (useArea.value == 4) {
 						uni.navigateTo({
 							url: `/packagePrize/coupon/detail?id=${ item.id }`
 						})
@@ -570,12 +577,10 @@
 		onReachBottom() {
 			if(this.total < this.pageNum * 20) return ;
 			this.status = 'loading';
-			// setTimeout(() => {
 			++this.pageNum
 			if(this.total < this.pageNum * 20) this.status = 'nomore';
 				else this.status = 'loading';
 			this.statusIndex == 3 && this.state == 0 ? this.getListTwo():this.getList()
-			// }, 2000)
 		},
 	}
 </script>
@@ -744,8 +749,7 @@
 							color: #fff;
 							
 							text:first-child {
-								font-size: 70rpx;
-								padding-right: 20rpx;
+								font-size: 45rpx;
 							}
 							
 							text:last-child {

+ 113 - 0
src/packagePrize/purchase/index.vue

@@ -0,0 +1,113 @@
+<template>
+	<view>
+		<!-- #ifdef MP-ALIPAY -->
+		<u-navbar :placeholder="true" bgColor="#fff" :autoBack="true" :border="true" title="购买成功" leftIconSize="0">
+		</u-navbar>
+		<!-- #endif -->
+		<!-- #ifndef MP-ALIPAY -->
+		<u-navbar :placeholder="true" bgColor="#fff" :autoBack="true" :border="true" title="购买成功"></u-navbar>
+		<!-- #endif -->
+		<view class="purchase">
+			<image class="imgOne" src="https://mp-public-test-1307117429.cos.ap-shanghai.myqcloud.com/v2/buy_suc.png"
+				mode="scaleToFill"></image>
+			<image class="imgTwo" :src="picUrl" mode="scaleToFill"></image>
+		</view>
+
+		<view class="package">
+			<button @click="toProcess()">立即抽奖</button>
+			<text>已购买的商品请稍后在“我的”-“仓库”中进行查看和提货</text>
+		</view>
+
+	</view>
+</template>
+
+<script>
+	import env from '../../config/env.js'
+	import $http from '@/utils/request.js'
+	export default {
+		data() {
+			return {
+				boxId: 0,
+				orderId: 0,
+				picUrl: '',
+			}
+		},
+		onLoad(opthios) {
+			this.boxId = opthios.boxId
+			this.orderId = opthios.orderId
+			this.getPicUrl()
+		},
+		methods: {
+			getPicUrl() {
+				$http.post('/api/v1/mp/user/mall/ticket/detail', {
+					boxId: this.boxId,
+					noToken: true
+				}).then(res => {
+					if (res.code == 0) {
+						this.picUrl = env.filePublic + res.data.picUrl.split(',')[0]
+					}
+				})
+			},
+			// 线上立即刮票成功,跳转到刮奖过程
+			toProcess() {
+				uni.navigateTo({
+					url: `/packagePrize/rolling/animation?boxId=${ this.boxId }&orderId=${ this.orderId }&isTry=0`
+				})
+				
+				//线上抽奖动画
+				// uni.navigateTo({
+				// 	url: `/packagePrize/rolling/index?boxId=${ this.boxId }&orderId=${ this.orderId }&isTry=0`
+				// })
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.purchase {
+		position: relative;
+		padding-top: 100rpx;
+		width: 592rpx;
+		height: 788rpx;
+		margin: 0 auto;
+
+		.imgOne {
+			width: 100%;
+			height: 100%;
+		}
+
+		.imgTwo {
+			z-index: 10;
+			width: 100%;
+			width: 520rpx;
+			height: 430rpx;
+			position: absolute;
+			top: 320rpx;
+			left: 36rpx;
+		}
+	}
+
+	.package {
+		margin-top: 100rpx;
+		text-align: center;
+
+		button {
+			margin: 0 auto;
+			width: 666rpx;
+			height: 98rpx;
+			background: linear-gradient(180deg, #FEA052 0%, #FF8D2F 100%);
+			border-radius: 56rpx;
+			color: #fff;
+		}
+
+		text {
+			margin-top: 54rpx;
+			display: inline-block;
+			width: 570rpx;
+			color: #666666;
+			font-size: 26rpx;
+			line-height: 32rpx;
+			letter-spacing: 1px;
+		}
+	}
+</style>

+ 389 - 0
src/packagePrize/rolling/animation.vue

@@ -0,0 +1,389 @@
+<template>
+	<view>
+		<view class="lucky"></view>
+		<u-overlay :show="luckyShow" :opacity="0.8" zIndex="100">
+			<view class="flex luck-warp" @touchmove.prevent.stop>
+				<view class="luck-info">
+					<view class="luck-info-bg">
+						<image src="../../static/lucky/lucky_bg.png" mode="scaleToFill"></image>
+					</view>
+					<view class="luck-info-content flex">
+						<view class="luck-info-content-num">
+							<image src="../../static/lucky/lucky_gkmp.png" mode="scaleToFill"
+								v-if="info.salePrice == 0"></image>
+							<image src="../../static/lucky/lucky_gkmptwo.png" mode="scaleToFill" v-else></image>
+						</view>
+						<view class="luck-info-content-img">
+							<view class="luck-info-content-img-word">
+								<image class="img" src="../../static/lucky/lucky_tu.png" mode="scaleToFill"></image>
+								<view class="luck-info-content-img-word__content">
+									<text>{{ info.awardsName }}</text>
+								</view>
+								<image class="imgtwo" src="../../static/lucky/lucky_xiaoguo.png" mode="scaleToFill"
+									v-if="infoimg">
+								</image>
+								<image class="img" src="../../static/lucky/lucky_guajiangqu.png" mode="scaleToFill"
+									v-if="info.status == 1">
+									<image class="imgone" src="../../static/lucky/lucky_yidong.png"
+										v-else-if="info.status == 2"></image>
+							</view>
+						</view>
+						<view class="luck-info-content-ticket">
+							<image src="../../static/lucky/lucky_piaohao.png" mode="scaleToFill"></image>
+							<view class="luck-info-content-ticket-info flex">
+								<view class="title" :class="{ 'action': info.status == 2 }">{{ info.title }}</view>
+								<view class="serialNo" :class="{ 'action': info.status == 2 }">序列号:{{ info.serialNo }}
+								</view>
+							</view>
+						</view>
+						<view class="luck-info-content-btn" style="width: 500rpx;" @click="toChoice" v-if="Choice">领取奖品</view>
+						<view class=" code" v-else>开奖啦!</view>
+					</view>
+				</view>
+			</view>
+		</u-overlay>
+	</view>
+</template>
+
+<script>
+	import env from '../../config/env.js'
+	import $http from '@/utils/request.js'
+	export default {
+		components: {
+		},
+		data() {
+			return {
+				orderId: '',
+				info: '',
+				luckyShow: true,
+				status: 2,
+				infoimg: false,
+				Choice: false,
+				ChoiceData: '',
+			};
+		},
+
+		onLoad(options) {
+			if (options.orderId) {
+				this.orderId = options.orderId
+				this.getDetail()
+			}	
+		},
+
+		methods: {
+			getDetail() {
+				let _this = this
+				uni.showLoading({
+					title: '加载中'
+				});
+				$http.post('/api/v1/mp/user/ticket/query', {
+					orderId: this.orderId,
+				}).then(res => {
+					uni.hideLoading();
+					if (res.code == 0) {
+						if (res.data.status == 2) {
+							_this.info = res.data
+							setTimeout(() => {
+								this.infoimg = true
+								setTimeout(() => {
+									this.ChoiceData = res.data.ticketId
+									this.Choice = true
+								}, 500)
+							}, 500)
+						} else {
+							let num = 0
+							let time = setInterval(() => {
+								num++
+								uni.showLoading({
+									title: '加载中'
+								});
+								$http.post('/api/v1/mp/user/ticket/query', {
+									orderId: this.orderId,
+								}).then(ele => {
+									if (ele.data.status == 2) {
+										uni.hideLoading();
+										clearInterval(time)
+										_this.info = res.data
+										setTimeout(() => {
+											this.infoimg = true
+											setTimeout(() => {
+												this.ChoiceData = res.data.ticketId
+												this.Choice = true
+
+											}, 500)
+										}, 500)
+									}
+								})
+								if (num == 10) {
+									uni.hideLoading();
+									clearInterval(time)
+								}
+							}, 1000)
+						}
+					}
+				}).catch(() => {
+					uni.hideLoading();
+				})
+			},
+
+			//跳转奖品页
+			toChoice() {
+				uni.redirectTo({
+					url: `/packagePrize/choice/index?id=${ this.ChoiceData }&type=offline`
+				})
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.luck-warp {
+		height: 100%;
+
+		.luck-info {
+			position: relative;
+			width: 87vw;
+			height: 60vh;
+
+			&-bg {
+				position: absolute;
+				top: 0;
+
+				image {
+					width: 87vw;
+					height: 60vh;
+				}
+			}
+
+			&-content {
+				flex-direction: column;
+				justify-content: flex-start;
+				position: absolute;
+				top: 0;
+				z-index: 10;
+				width: 100%;
+				height: 100%;
+
+				&-num {
+					position: relative;
+					width: 422rpx;
+					height: 8vh;
+					margin-top: 16vh;
+					margin-bottom: 3vh;
+
+					image {
+						position: absolute;
+						top: 0;
+						width: 100%;
+						height: 100%;
+					}
+
+
+				}
+
+				&-img {
+					position: relative;
+					width: 73%;
+					height: 10vh;
+					background-color: #fff;
+					border-radius: 12rpx;
+
+					&-word {
+						position: absolute;
+						top: 15%;
+						left: 5%;
+						width: 90%;
+						height: 85%;
+						overflow: hidden;
+
+						.img {
+							position: absolute;
+							width: 100%;
+							height: 82.6%;
+						}
+
+						.imgtwo {
+							position: absolute;
+							width: 20%;
+							height: 82%;
+							left: -20%;
+							animation: shadowTwoMove 0.5s linear infinite;
+							animation-iteration-count: 1;
+						}
+
+						.imgone {
+							position: absolute;
+							left: 100%;
+							width: 100%;
+							height: 100%;
+							animation: shadowMove 0.5s linear infinite;
+							animation-iteration-count: 1;
+						}
+
+						&__content {
+							position: absolute;
+							top: 25%;
+							text-align: center;
+							width: 100%;
+							height: 100%;
+							font-size: 36rpx;
+							font-family: YouSheBiaoTiHei;
+							font-weight: 400;
+							color: #fff;
+						}
+					}
+
+				}
+
+				&-title {
+					font-size: 40rpx;
+					line-height: 40rpx;
+					color: #FEFEFE;
+					margin-bottom: 1vh;
+				}
+
+				&-tip {
+					width: 80%;
+					font-size: 26rpx;
+					line-height: 35rpx;
+					text-align: center;
+					color: #fff;
+				}
+
+				&-ticket {
+					position: relative;
+					width: 73%;
+					height: 10vh;
+					margin-top: 2vh;
+
+					image {
+						position: absolute;
+						top: 0;
+						width: 100%;
+						height: 95%;
+					}
+
+					&-info {
+						width: 90%;
+						height: 75%;
+						left: 5%;
+						position: absolute;
+						top: 0;
+						z-index: 5;
+
+						flex-direction: column;
+
+						.title {
+							font-size: 30rpx;
+							line-height: 30rpx;
+							color: #FF6D2C;
+							margin-top: 1vh;
+							margin-bottom: 1vh;
+							width: 90%;
+							white-space: nowrap;
+							overflow: hidden;
+							text-overflow: ellipsis;
+						}
+
+						.serialNo {
+							font-size: 24rpx;
+							color: #FF6D2C;
+						}
+
+						.action {
+							color: #FFCBAA;
+						}
+					}
+				}
+
+				&-btn {
+					padding: 0 8%;
+					height: 7vh;
+					line-height: 7vh;
+					background: linear-gradient(0deg, #FF4924, #F9D448);
+					box-shadow: 0px 6px 9px 0px rgba(135, 19, 3, 0.49);
+					border-radius: 4vh;
+					text-align: center;
+					color: #FEFEFE;
+					font-size: 40rpx;
+					margin-top: 1vh;
+				}
+
+				.code {
+					padding: 0 20%;
+					height: 7vh;
+					line-height: 10vh;
+					text-align: center;
+					color: #FEFEFE;
+					font-family: YouSheBiaoTiHei;
+					font-size: 38rpx
+				}
+			}
+
+			&-close {
+				width: 100%;
+				position: absolute;
+				bottom: -140rpx;
+
+				&-content {
+					width: 70rpx;
+					height: 70rpx;
+					border-radius: 50%;
+					border: 1px solid #fff;
+				}
+			}
+		}
+	}
+
+	.lucky {
+		width: 100%;
+		height: 100vh;
+		background: url(https://mp-public-1310078123.cos.ap-shanghai.myqcloud.com/v2/hit_bkg.png) center center no-repeat;
+		background-size: 100vw 100vh;
+	}
+
+	.null-prize {
+		display: flex;
+		flex-direction: column;
+		align-items: center;
+		justify-content: center;
+		width: 80vw;
+		height: 320rpx;
+		background-color: #FFFFFF;
+		border: 1px solid rgba(187, 187, 187, 100);
+
+		.btn {
+			margin-top: 60rpx;
+			width: 160rpx;
+			height: 60rpx;
+			line-height: 60rpx;
+			border-radius: 8rpx;
+			background-color: rgba(235, 112, 9, 100);
+			color: rgba(255, 255, 255, 100);
+			font-size: 28rpx;
+			text-align: center;
+		}
+	}
+
+	// 支付后移动动画
+	@keyframes shadowMove {
+		0% {
+			left: 0%;
+		}
+
+		100% {
+			left: 100%;
+		}
+	}
+
+	// 支付后移动动画
+	@keyframes shadowTwoMove {
+		0% {
+			left: -20%;
+		}
+
+		100% {
+			left: 100%;
+		}
+	}
+</style>

+ 8 - 6
src/packagePrize/rolling/index.vue

@@ -1,12 +1,14 @@
 <template>
 	<view>
 		<!-- #ifdef MP-ALIPAY -->
-		<u-navbar :placeholder="true" bgColor="#fff" :autoBack="true" :border="true" title="盲票开启" v-if="rollingShow"
-			leftIconSize="0"></u-navbar>
+		<!-- <u-navbar :placeholder="true" bgColor="#fff" :autoBack="true" :border="true" title="盲票开启" v-if="rollingShow"
+			leftIconSize="0"></u-navbar> -->
+			<u-navbar :placeholder="true" bgColor="#fff" :autoBack="true" :border="true" title="抽奖中" v-if="rollingShow"
+				leftIconSize="0"></u-navbar>
 		<!-- #endif -->
 
 		<!-- #ifndef MP-ALIPAY -->
-		<u-navbar :placeholder="true" bgColor="#fff" :autoBack="true" :border="true" title="盲票开启" v-if="rollingShow">
+		<u-navbar :placeholder="true" bgColor="#fff" :autoBack="true" :border="true" title="抽奖中" v-if="rollingShow">
 		</u-navbar>
 		<!-- #endif -->
 
@@ -113,7 +115,7 @@
 				</view>
 			</view>
 			<view class="prize-tip flex" v-if="isTry == 0" @click="back">
-				<view class="txt">再来一张</view>
+				<view class="txt">返回首页</view>
 			</view>
 		</view>
 	</view>
@@ -453,8 +455,8 @@
 			},
 
 			back() {
-				uni.navigateBack({
-					delta: 1
+				uni.switchTab({
+					url:'/pages/index/index'
 				})
 			},
 

+ 15 - 20
src/packagePrize/ticket/index.vue

@@ -86,13 +86,9 @@
 		},
 		methods: {
 			getList() {
-				uni.showLoading({
-					title: '加载中'
-				});
 				$http.post(`/api/v1/mp/user/mine/ticket/list?pageNum=${this.pageNum}&pageSize=20`, {
 					status: this.state
 				}).then(res => {
-					uni.hideLoading();
 					if (res.code == 0) {
 						res.rows.forEach(item => {
 							item.picUrl = env.filePublic + item.picUrl.split(',')[0] + '?imageView2/2/w/170'
@@ -101,7 +97,6 @@
 						this.list = this.list.concat(res.rows)
 					}
 				}).catch(() => {
-					uni.hideLoading();
 				})
 			},
 
@@ -112,19 +107,21 @@
 			},
 
 			toChoice(item) {
-				let type = item.type && JSON.parse(item.type).value
-				
-				if(type == 'offline') {
-					uni.navigateTo({
-						url: `/packagePrize/choice/index?id=${ item.ticketId }&type=offLine`
-					})
-				} else if (type == 'online') {
-					uni.navigateTo({
-						url: `/packagePrize/rolling/index?ticketId=${ item.ticketId }&isTry=0`
-					})
-				} else {
-					uni.$u.toast('请联系客服')
-				}
+				uni.navigateTo({
+					url: `/packagePrize/choice/index?id=${ item.ticketId }`
+				})
+				// let type = item.type && JSON.parse(item.type).value
+				// if(type == 'offline') {
+				// 	uni.navigateTo({
+				// 		url: `/packagePrize/choice/index?id=${ item.ticketId }&type=offline`
+				// 	})
+				// } else if (type == 'online') {
+				// 	uni.navigateTo({
+				// 		url: `/packagePrize/rolling/index?ticketId=${ item.ticketId }&isTry=0`
+				// 	})
+				// } else {
+				// 	uni.$u.toast('请联系客服')
+				// }
 			},
 
 			changeTab(e) {
@@ -167,12 +164,10 @@
 		onReachBottom() {
 			if(this.total < this.pageNum * 20) return ;
 			this.status = 'loading';
-			// setTimeout(() => {
 			++this.pageNum
 			if(this.total < this.pageNum * 20) this.status = 'nomore';
 				else this.status = 'loading';
 			this.getList()
-			// }, 2000)
 		},
 	}
 </script>

+ 19 - 0
src/pages.json

@@ -80,6 +80,9 @@
 				},
 				{
 					"path": "recovery/detail"
+				},
+				{
+					"path": "promoters/index"
 				}
 			]
 		},
@@ -99,6 +102,8 @@
 				},
 				{
 					"path": "goods/detail"
+				}, {
+					"path": "goods/index"
 				},
 				{
 					"path": "prize/index"
@@ -111,6 +116,18 @@
 					"style": {
 						"navigationBarTextStyle": "white"
 					}
+				},
+				{
+					"path": "rolling/animation",
+					"style": {
+						"navigationBarTextStyle": "white"
+					}
+				},
+				{
+					"path": "purchase/index"
+				},
+				{
+					"path": "address/index"
 				}
 			]
 		},
@@ -155,6 +172,8 @@
 				},
 				{
 					"path": "rule/index"
+				},{
+					"path": "rule/purchase"
 				}
 			]
 		}

+ 0 - 7
src/pages/activity/index.vue

@@ -144,14 +144,10 @@
 				this.getList()
 			},
 			getList() {
-				uni.showLoading({
-					title: '加载中'
-				});
 				this.loading = true
 				$http.post(`/api/v1/mp/user/marketing/list?pageNum=${this.pageNum}&pageSize=5`, {
 					triggerStatus: this.triggerStatus,
 				}).then(res => {
-					uni.hideLoading();
 					this.loading = false
 					if (res.code == 0) {
 						res.rows.forEach(item => {
@@ -163,7 +159,6 @@
 						this.list = this.list.concat(res.rows)
 					}
 				}).catch(() => {
-					uni.hideLoading();
 					this.loading = false
 				})
 			},
@@ -188,8 +183,6 @@
 		onShareTimeline() {
 			return {
 				title: '盲票,玩的就是有趣',
-				// query: { userId: this.userInfo.userId,
-				// 		type: 1, }
 				query: `userId=${ this.userInfo.userId?this.userInfo.userId:null }&type=1`
 			}
 		},

+ 130 - 132
src/pages/core/index.vue

@@ -4,7 +4,8 @@
 		<u-navbar leftIconSize="0" :placeholder="true" bgColor="#ffffff">
 			<view class="u-nav-slot" slot="left">
 				<view class="u-nav-slot__input flex">
-					<u-input v-model="goodsTitle" @confirm="toGoodsList()" confirmType="search" placeholder="搜索商品" border="none" prefixIcon="search" prefixIconStyle="font-size: 22px;color: #909399" />
+					<u-input v-model="goodsTitle" @confirm="toGoodsList()" confirmType="search" placeholder="搜索商品"
+						border="none" prefixIcon="search" prefixIconStyle="font-size: 22px;color: #909399" />
 					<!-- <view class="u-nav-slot__input__btn" @click="toGoodsList()">搜索</view> -->
 				</view>
 			</view>
@@ -51,7 +52,8 @@
 					</view>
 					<view class="fixed-top-screen-content__coin" v-if="screenShow">
 						<view class="fixed-top-screen-content__coin__list">
-							<view class="item flex" :class="{ 'action': coinActionIndex == index }" v-for="(item, index) in coinList" :key="index" @click="selectCoin(item, index)">
+							<view class="item flex" :class="{ 'action': coinActionIndex == index }"
+								v-for="(item, index) in coinList" :key="index" @click="selectCoin(item, index)">
 								<text v-if="item.min">{{ item.min }}</text>
 								<text v-if="item.max">-{{ item.max }}</text>
 								<text>{{ item.desc }}</text>
@@ -62,31 +64,34 @@
 			</view>
 		</view>
 		<view class="core-none"></view>
-		
+
 		<!-- 轮播 -->
 		<view class="core-swiper" v-if="swiperList.length">
-			<swiper class="core-swiper-centent" circular :indicator-dots="true" :autoplay="true" :interval="3000" indicator-active-color="#fff">
+			<swiper class="core-swiper-centent" circular :indicator-dots="true" :autoplay="true" :interval="3000"
+				indicator-active-color="#fff">
 				<swiper-item class="swiper-item" v-for="(item, index) in swiperList" :key="index">
 					<image :src="item.picUrl" mode="scaleToFill" @click="toPage(item)"></image>
 				</swiper-item>
 			</swiper>
 		</view>
-		
+
 		<!-- 二级分类 -->
 		<view class="core-category">
 			<swiper class="core-category-swiper" :autoplay="false">
-				<swiper-item class="swiper-item" v-for="(item, index) in classifyIndex == 0 ? classifyListFilter : classifyList[classifyIndex].list" :key="index">
+				<swiper-item class="swiper-item"
+					v-for="(item, index) in classifyIndex == 0 ? classifyListFilter : classifyList[classifyIndex].list"
+					:key="index">
 					<view class="swiper-item-wrap">
 						<view class="swiper-item-wrap__content" v-for="(items, indexs) in item" :key="indexs">
 							<image :src="items.picUrl" mode="aspectFit" @click="toCategoryGoods(index, indexs)"></image>
 							<view class="name">{{ items.name }}</view>
 						</view>
 					</view>
-					
+
 				</swiper-item>
 			</swiper>
 		</view>
-		
+
 		<!-- 标签商品 -->
 		<view class="tag-goods" v-for="(item, index) in exclusiveSingle" :key="index">
 			<image class="tag-goods-imgBg" src="../../static/core/core_bg.png" mode="scaleToFill"></image>
@@ -102,9 +107,10 @@
 						<image src="../../static/core/core_right.png" mode="scaleToFill"></image>
 					</view>
 				</view>
-				
+
 				<view class="tag-goods-content-list">
-					<view class="tag-goods-content-list-item flex" v-for="(items, indexs) in item.data" :key="indexs" @click="toGoodsDetail(items)">
+					<view class="tag-goods-content-list-item flex" v-for="(items, indexs) in item.data" :key="indexs"
+						@click="toGoodsDetail(items)">
 						<view class="image flex">
 							<image :src="items.picUrl" mode="aspectFit"></image>
 						</view>
@@ -113,11 +119,12 @@
 				</view>
 			</view>
 		</view>
-		
+
 		<!-- 商品列表 -->
 		<view class="core-goods">
 			<view class="core-goods-list flex">
-				<view class="core-goods-list-item flex" v-for="(item, index) in list" :key="index" @click="toGoodsDetail(item)">
+				<view class="core-goods-list-item flex" v-for="(item, index) in list" :key="index"
+					@click="toGoodsDetail(item)">
 					<view class="image-wrap flex">
 						<image :src="item.picUrl" mode="aspectFit"></image>
 					</view>
@@ -143,13 +150,16 @@
 			</view>
 			<view class="flex empty" v-if="!list.length">
 				<view class="center">
-					<image class="center-img" src="https://mp-public-1310078123.cos.ap-shanghai.myqcloud.com/v2/nodata_3.png" mode="scaleToFill"></image>
+					<image class="center-img"
+						src="https://mp-public-1310078123.cos.ap-shanghai.myqcloud.com/v2/nodata_3.png"
+						mode="scaleToFill"></image>
 					<view class="center-font">还没有商品</view>
 				</view>
 			</view>
-			<u-loadmore :line="true" v-if="list.length" :status="status" :loading-text="'努力加载中'" :nomore-text="'已经到底了'" />
+			<u-loadmore :line="true" v-if="list.length" :status="status" :loading-text="'努力加载中'"
+				:nomore-text="'已经到底了'" />
 		</view>
-		
+
 		<custom-tab-bar :activeValue="'core'" />
 	</view>
 </template>
@@ -165,7 +175,7 @@
 		},
 		data() {
 			return {
-				status: 'nomore',//上拉刷新状态
+				status: 'nomore', //上拉刷新状态
 				pageNum: 1,
 				total: 0,
 				list: [],
@@ -183,14 +193,13 @@
 				priceStep: 0,
 				screenShow: false,
 				initData: {},
-				coinNum:{
+				coinNum: {
 					startPrice: null,
 					endPrice: null
 				},
 				coinActionIndex: 0,
 				coinActionInfo: {},
-				coinList:[
-					{
+				coinList: [{
 						min: null,
 						max: null,
 						desc: '全部'
@@ -232,7 +241,7 @@
 		},
 		onLoad(opthios) {
 			if (opthios.userId) {
-				uni.setStorageSync('shareUid', opthios.userId != 'undefined'?opthios.userId:null)
+				uni.setStorageSync('shareUid', opthios.userId != 'undefined' ? opthios.userId : null)
 				if (opthios.userId === undefined || opthios.userId === 'undefined') {
 					uni.getSystemInfo({
 						success(res) {
@@ -242,7 +251,7 @@
 						}
 					})
 				}
-				
+
 			}
 			if (opthios.type) {
 				uni.setStorageSync('shareType', opthios.type)
@@ -269,55 +278,59 @@
 				this.list = []
 				this.getList()
 			},
-			
+
 			// 获取分类
 			getClassify() {
 				$http.post('/api/v1/mp/user/exchange/category/listTree', {}).then(res => {
-					if(res.code == 0){
+					if (res.code == 0) {
 						let interval = 10
 						this.classifyList = res && res.rows
 						this.classifyList.forEach(item => {
-							item.picUrl = env.filePublic + item.picUrl.split(',')[0] + '?imageView2/2/w/340'
+							item.picUrl = env.filePublic + item.picUrl.split(',')[0] +
+								'?imageView2/2/w/340'
 							item.goodsCategoryList.forEach(ele => {
-								ele.picUrl = env.filePublic + ele.picUrl.split(',')[0] + '?imageView2/2/w/340'
+								ele.picUrl = env.filePublic + ele.picUrl.split(',')[0] +
+									'?imageView2/2/w/340'
 							})
 							item.list = []
-							if(item.goodsCategoryList.length > interval) {
+							if (item.goodsCategoryList.length > interval) {
 								let num = Math.ceil(item.goodsCategoryList.length / interval)
 								let arr = []
-								
+
 								let a = 0
 								let stop = interval
-								for(let i = 1; i <= num; i++) {
+								for (let i = 1; i <= num; i++) {
 									arr = item.goodsCategoryList.slice(a, stop)
 									a = i * interval
 									stop = stop + interval
-									
+
 								}
 							} else {
 								item.list.push(item.goodsCategoryList)
 							}
 						})
-						if(this.classifyList.length > interval) {
+						if (this.classifyList.length > interval) {
 							let num = Math.ceil(this.classifyList.length / interval)
 							let arr = []
-							
+
 							let a = 0
 							let stop = interval
-							for(let i = 1; i <= num; i++) {
+							for (let i = 1; i <= num; i++) {
 								arr = this.classifyList.slice(a, stop)
 								a = i * interval
 								stop = stop + interval
 								this.classifyListFilter.push(arr)
 							}
 						} else {
-							this.classifyListFilter =[ [ ...this.classifyList ] ]
+							this.classifyListFilter = [
+								[...this.classifyList]
+							]
 						}
 						this.classifyList.unshift({ name: '全部', categoryId: '' })
 					}
 				})
 			},
-			
+
 			//轮播图
 			getSwiper() {
 				$http.post(`/api/v1/mp/user/exchange/banner/list`, {
@@ -328,7 +341,7 @@
 					this.swiperList = res.data
 				})
 			},
-			
+
 			// 标签商品
 			async getExclusive() {
 				let resData = await $http.post(`/api/v1/mp/user/exchange/activity/list`, {
@@ -336,7 +349,6 @@
 				})
 				let goodsList = []
 				for (let item of resData.data) {
-			
 					let resDatas = await $http.post(`/api/v1/mp/user/exchange/goods/list?pageNum=1&pageSize=10`, {
 						noToken: true,
 						tagIds: item.tagId
@@ -349,40 +361,36 @@
 				}
 				goodsList.forEach(item => {
 					item.data.forEach(items => {
-						items.picUrl = env.filePublic + items.picUrl.split(',')[0] + '?imageView2/2/w/340'
+						items.picUrl = env.filePublic + items.picUrl.split(',')[0] +
+							'?imageView2/2/w/340'
 					})
 				})
 				this.exclusiveSingle = goodsList
 			},
-			
+
 			// 商品列表
 			getList() {
-				uni.showLoading({
-					title: '加载中'
-				});
 				let data = {
 					categoryId: this.categoryId,
 					priceSort: this.priceSort,
 					...this.coinNum,
 					noToken: true
 				}
-				$http.post(`/api/v1/mp/user/exchange/goods/list?pageNum=${this.pageNum}&pageSize=20`,data).then(
+				$http.post(`/api/v1/mp/user/exchange/goods/list?pageNum=${this.pageNum}&pageSize=20`, data).then(
 					res => {
-						uni.hideLoading();
 						if (res.code == 0) {
 							res.rows.forEach(item => {
 								let picUrlArr = item.picUrl.split(',')
 								item.picUrl = env.filePublic + picUrlArr[0] + '?imageView2/2/w/340'
 							})
-			
+
 							this.total = res.total
 							this.list = this.list.concat(res.rows)
 						}
 					}).catch(() => {
-					uni.hideLoading();
 				})
 			},
-			
+
 			getBean() {
 				uni.showLoading({
 					title: '加载中'
@@ -396,7 +404,7 @@
 					uni.hideLoading();
 				})
 			},
-			
+
 			// 切换分类
 			changeClassify(e) {
 				this.categoryId = e.categoryId
@@ -412,20 +420,20 @@
 				this.coinActionInfo = {}
 				this.pageList()
 			},
-			
+
 			// 盲豆筛选切换
 			changeScreen(num) {
 				this.screenIndex = num
-				if(num == 1) {
-					if(this.priceStep == 0) {
-						this.priceStep ++
+				if (num == 1) {
+					if (this.priceStep == 0) {
+						this.priceStep++
 						this.priceShow = true
 						this.priceSort = 1
 					} else if (this.priceStep == 1) {
-						this.priceStep ++
+						this.priceStep++
 						this.priceShow = false
 						this.priceSort = 2
-					} else if(this.priceStep == 2) {
+					} else if (this.priceStep == 2) {
 						this.priceStep = 0
 						this.priceShow = false
 						this.priceSort = null
@@ -439,7 +447,7 @@
 					this.priceSort = null
 				}
 			},
-			
+
 			selectCoin(item, index) {
 				this.coinActionIndex = index
 				this.coinActionInfo = item
@@ -468,21 +476,21 @@
 					url: `/packageGoods/goods/detail?id=${ item.goodsId }`
 				})
 			},
-			
+
 			// 商品列表
 			toGoodsList() {
 				uni.navigateTo({
 					url: `/packageGoods/goods/list?title=${ this.goodsTitle }`
 				})
 			},
-			
+
 			// 商品标签
 			toTagGoods(item) {
 				uni.navigateTo({
 					url: `/packageGoods/goods/list?name=${ item.name }&tagIds=${ item.tagId ? item.tagId : '' }`
 				})
 			},
-			
+
 			// 商品分类
 			toCategoryGoods(index, indexs) {
 				let list = this.classifyIndex == 0 ? this.classifyListFilter : this.classifyList[this.classifyIndex].list
@@ -502,38 +510,24 @@
 		},
 		onReachBottom() {
 			// 判断是否有数据
-			// if (this.total > this.pageNum * 20) {
-			// 	setTimeout(() => {
-			// 		++this.pageNum
-			// 		this.getList()
-			// 	}, 500)
-			// } else {
-			// 	uni.$u.toast('已经到底了')
-			// }
-			
-			if(this.total < this.pageNum * 20) return ;
+			if (this.total < this.pageNum * 20) return;
 			this.status = 'loading';
-			// setTimeout(() => {
 			++this.pageNum
-			if(this.total < this.pageNum * 20) this.status = 'nomore';
-				else this.status = 'loading';
+			if (this.total < this.pageNum * 20) this.status = 'nomore';
+			else this.status = 'loading';
 			this.getList()
-			// }, 2000)
 		},
 		//分享好友
 		onShareAppMessage(res) {
 			return {
 				title: '盲票,玩的就是有趣',
 				path: '/pages/index/index',
-				// imageUrl:'../../static/icon/lucky_bg.png',
 			}
 		},
 		//分享朋友圈
 		onShareTimeline() {
 			return {
 				title: '盲票,玩的就是有趣',
-				// query: { userId: this.userInfo.userId,
-				// 		type: 1, }
 				query: `userId=${ this.userInfo.userId?this.userInfo.userId:null }&type=1`
 			}
 		}
@@ -543,18 +537,18 @@
 <style lang="scss" scoped>
 	.core {
 		background-color: #fff;
-		
+
 		&-none {
 			height: 120rpx;
 		}
 	}
-	
+
 	// 搜索
 	.u-nav-slot {
 		text {
 			font-size: 32rpx;
 		}
-		
+
 		&__input {
 			position: relative;
 			height: 70rpx;
@@ -563,7 +557,7 @@
 			background: #F4F5F6;
 			border-radius: 35rpx;
 			padding-right: 30rpx;
-			
+
 			&__btn {
 				z-index: 200;
 				width: 140rpx;
@@ -578,19 +572,19 @@
 			}
 		}
 	}
-	
+
 	// 固定搜索、分类
 	.fixed-top {
 		position: fixed;
 		z-index: 100;
 		width: 100%;
 		background-color: #fff;
-		
+
 		// 搜索
 		&-search {
 			justify-content: space-between;
 			padding: 14rpx 30rpx 34rpx;
-			
+
 			&__input {
 				position: relative;
 				flex: 1;
@@ -598,7 +592,7 @@
 				padding-left: 46rpx;
 				background: #F4F5F6;
 				border-radius: 20rpx;
-				
+
 				&__btn {
 					position: absolute;
 					right: 0;
@@ -613,23 +607,23 @@
 					border-radius: 18rpx;
 				}
 			}
-			
+
 			image {
 				width: 52rpx;
 				height: 52rpx;
 				margin-left: 50rpx;
 			}
 		}
-		
+
 		// 分类
 		&-classify {
 			padding-bottom: 20rpx;
 		}
-		
+
 		// 盲豆筛选
 		&-screen {
 			height: 64rpx;
-			
+
 			&-content {
 				position: relative;
 				justify-content: space-between;
@@ -637,22 +631,22 @@
 				color: #fff;
 				height: 100%;
 				background: #F9822C;
-				
+
 				&__item {
 					.title {
 						margin-right: 14rpx;
 					}
-					
+
 					.select {
 						flex-direction: column;
-						
+
 						image {
 							width: 18rpx;
 							height: 26rpx;
 						}
 					}
 				}
-				
+
 				&__coin {
 					position: absolute;
 					right: 0;
@@ -661,17 +655,17 @@
 					height: 390rpx;
 					background: #FFFFFF;
 					box-shadow: 0px 0px 2px 0px rgba(100, 100, 100, 0.1);
-					
+
 					&__list {
 						padding-top: 20rpx;
 						color: #666;
-						
+
 						.item {
 							margin-bottom: 30rpx;
 							font-size: 26rpx;
 							line-height: 26rpx;
 						}
-						
+
 						.action {
 							color: #F9822C;
 						}
@@ -680,19 +674,19 @@
 			}
 		}
 	}
-	
+
 	// 轮播
 	.core-swiper {
 		margin: 0 34rpx 20rpx;
 		border-radius: 16rpx;
-		
+
 		&-centent {
 			height: 300rpx;
-			
+
 			.swiper-item {
 				width: 100%;
 				height: 100%;
-				
+
 				image {
 					width: 100%;
 					height: 100%;
@@ -701,28 +695,29 @@
 			}
 		}
 	}
-	
+
 	// 二级分类
 	.core-category {
 		width: 100%;
 		height: 360rpx;
 		margin-bottom: 34rpx;
 		padding: 0 34rpx;
-		
+
 		&-swiper {
-			
+
 			width: 100%;
 			height: 360rpx;
-			
+
 			.swiper-item {
 				width: 100%;
 				height: 360rpx;
-				
+
 				&-wrap {
 					width: 100%;
 					height: 100%;
 					display: flex;
 					flex-wrap: wrap;
+
 					&__content {
 						display: flex;
 						align-items: center;
@@ -730,18 +725,18 @@
 						justify-content: space-between;
 						width: 20%;
 						height: 50%;
-						
+
 						image {
 							width: 90%;
 							height: 70%;
 						}
 					}
 				}
-				
+
 			}
 		}
 	}
-	
+
 	// 标签商品
 	.tag-goods {
 		display: flex;
@@ -749,32 +744,32 @@
 		position: relative;
 		margin: 0 34rpx 34rpx;
 		height: 350rpx;
-		
+
 		&-imgBg {
 			position: absolute;
 			top: 0;
 			width: 100%;
 			height: 350rpx;
 		}
-		
+
 		&-content {
 			width: 100%;
 			position: absolute;
 			top: 0;
 			z-index: 5;
 			padding: 26rpx 22rpx;
-			
+
 			&-nav {
 				justify-content: space-between;
 				height: 40rpx;
 				margin-bottom: 10rpx;
-				
+
 				&__left {
 					image {
 						width: 40rpx;
 						height: 30rpx;
 					}
-					
+
 					.title {
 						font-family: YouSheBiaoTiHei;
 						font-weight: 400;
@@ -783,7 +778,7 @@
 						padding: 0 36rpx;
 					}
 				}
-				
+
 				&__right {
 					.title {
 						font-family: YouSheBiaoTiHei;
@@ -791,23 +786,23 @@
 						color: #FFFFFF;
 						margin-right: 12rpx;
 					}
-					
+
 					image {
 						width: 22rpx;
 						height: 20rpx;
 					}
 				}
 			}
-			
+
 			&-list {
 				display: flex;
 				height: 260rpx;
 				overflow-x: auto;
-				
+
 				&-item {
 					flex-direction: column;
 					margin-right: 14rpx;
-					
+
 					.image {
 						width: 180rpx;
 						height: 180rpx;
@@ -815,13 +810,13 @@
 						box-shadow: 0px 0px 4px 0px rgba(100, 100, 100, 0.13);
 						border-radius: 4rpx;
 						margin-bottom: 24rpx;
-						
+
 						image {
 							width: 100%;
 							height: 100%;
 						}
 					}
-					
+
 					.title {
 						text-align: center;
 						line-height: 28rpx;
@@ -831,16 +826,16 @@
 			}
 		}
 	}
-	
+
 	// 商品列表
 	.core-goods {
 		padding: 0 34rpx;
-		
+
 		&-list {
 			width: 100%;
 			justify-content: space-between;
 			flex-wrap: wrap;
-			
+
 			&-item {
 				flex-direction: column;
 				justify-content: flex-start;
@@ -850,23 +845,23 @@
 				box-shadow: 0px 0px 3px 0px rgba(100, 100, 100, 0.1);
 				border-radius: 16rpx;
 				margin-bottom: 30rpx;
-				
+
 				.image-wrap {
 					width: 100%;
 					height: 320rpx;
 					margin-bottom: 16rpx;
-					
+
 					image {
 						width: 100%;
 						height: 100%;
 						border-radius: 16rpx 16rpx 0 0;
 					}
 				}
-				
+
 				.content {
 					width: 100%;
 					padding: 0 22rpx;
-					
+
 					&-title {
 						height: 28rpx;
 						font-size: 28rpx;
@@ -874,6 +869,7 @@
 						font-weight: bold;
 						overflow: hidden;
 					}
+
 					&-titletwo {
 						height: 34rpx;
 						font-size: 28rpx;
@@ -883,52 +879,54 @@
 						overflow: hidden;
 						text-overflow: ellipsis;
 					}
-					
+
 					&-coin {
 						height: 34rpx;
 						font-size: 24rpx;
 						justify-content: space-between;
 						margin-top: 30rpx;
 						margin-bottom: 24rpx;
-						
+
 						&__left {
 							margin-right: 24rpx;
 							font-size: 28rpx;
 							font-weight: bold;
-							
+
 							text {
 								font-weight: normal;
 							}
-							
+
 							image {
 								width: 34rpx;
 								height: 34rpx;
 							}
 						}
-						
+
 						&__right {
 							color: #666666;
 							text-decoration: line-through;
 						}
 					}
-					
+
 					&-price {
 						font-size: 24rpx;
 						line-height: 24rpx;
 						color: #666666;
 					}
 				}
-			
+
 			}
 		}
+
 		.empty {
 			.center {
 				text-align: center;
+
 				&-img {
 					width: 228rpx;
 					height: 320rpx;
 				}
-			
+
 				&-font {
 					font-size: 30rpx;
 					font-weight: 400;

+ 1213 - 0
src/pages/index/index -2022-7-15.vue

@@ -0,0 +1,1213 @@
+<template>
+	<view>
+		<view class="box">
+			<view class="index" :style="{ top: statusHeight + 'px' }">
+				<view class="barrage">
+					<!-- 背景 -->
+					<image class="barrage-bg" src="../../static/index/barrage_bg.png" mode="scaleToFill"></image>
+					<!-- 中奖信息轮播 -->
+					<swiper class="barrage-swiper" :interval="2000" :autoplay="true" :vertical="true" :circular="true">
+						<swiper-item v-for="(item, index) in prizeNewsListOne" :key="index">
+							<view class="barrage-swiper-item flex">
+								<view class="barrage-swiper-item-content flex">
+									<image :src="item.avatar" mode="scaleToFill" />
+									<view class="title ells-one">{{ item.nickName }}
+										{{ item.type == 1 ? '刮出了' : '兑换了' }} {{ item.prizeInfo }}
+									</view>
+								</view>
+							</view>
+						</swiper-item>
+					</swiper>
+					<view class="barrage-none"></view>
+				</view>
+
+				<!-- 查看规则 -->
+				<view class="rule">
+					<!-- #ifndef MP-ALIPAY -->
+					<view class="rule-content flex" @click="toRule">
+						<image src="../../static/index/index_tip.png" mode="scaleToFill"></image>
+						<text>查看规则</text>
+					</view>
+					<!-- #endif -->
+				</view>
+
+				<!-- 盲票轮播 -->
+				<view class="ticket">
+					<swiper class="ticket-swiper" :current="ticketIndex" :autoplay="false" :circular="true"
+						:duration="200" @change="changeTicket">
+						<swiper-item v-for="(item, index) in ticketList" :key="index">
+							<view class="ticket-swiper-item flex" @click="toTicketBox(item)">
+								<image class="ticket-swiper-item-box" :src="item.picUrl[2]" mode="scaleToFill"></image>
+								<image class="ticket-swiper-item-prize" :src="item.picUrl[1]" mode="scaleToFill">
+								</image>
+							</view>
+						</swiper-item>
+					</swiper>
+					<view class="ticket-left" @click="ticketRight()">
+						<image src="../../static/index/index_tip_left.png" mode="scaleToFill"></image>
+					</view>
+					<view class="ticket-right" @click="ticketLeft()">
+						<image src="../../static/index/index_tip_left.png" mode="scaleToFill"></image>
+					</view>
+
+				</view>
+
+				<!-- 投诉建议 -->
+				<view class="proposal flex">
+					<view class="proposal-time flex" v-if="activityTime && activityTime > 0" @click="toActivity">
+						<image src="../../static/index/index_time_top.png" mode="scaleToFill"></image>
+						<view class="time">
+							<u-count-down :time="activityTime" format="HH:mm:ss:SSS" autoStart millisecond>
+							</u-count-down>
+						</view>
+					</view>
+					<view v-else></view>
+					<view class="proposal-progress">
+						<u-line-progress :percentage="percentage" height="3" :showText="false"
+							inactiveColor="rgba(255, 255, 255, .36)" activeColor="#fff" />
+					</view>
+					<!-- #ifdef MP-WEIXIN -->
+					<view class="proposal-tip" @click="contactService">
+						<image src="../../static/index/index_tip_bg.png" mode="scaleToFill"></image>
+						<text>投诉建议</text>
+					</view>
+					<!-- #endif -->
+
+				</view>
+
+				<!-- 中奖概率 -->
+				<view class="chance flex">
+					<view class="chance-title">中奖概率:</view>
+					<view class="chance-hitRate flex">
+						<view class="chance-hitRate-content flex"
+							v-for="(item, index) in ticketInfo.ticketAwardsLabelList" :key="index">
+							<image :src="item.picUrl" mode="scaleToFill"></image>
+							<text>{{ item.hitRate }}%</text>
+						</view>
+					</view>
+				</view>
+
+				<!-- 盲票名称轮播 -->
+				<view class="ticket-title" flex>
+					<swiper class="ticket-title-swiper flex" :duration="0" :current="ticketTitleIndex"
+						previous-margin="110px" next-margin="110px" :autoplay="false" :circular="true"
+						@change="changeTicketTitle">
+						<swiper-item v-for="(item, index) in ticketList" :key="index">
+							<view class="ticket-title-swiper-item flex" @click="clickTicketTitle(index)"
+								:class="{ 'action': ticketTitleIndex == index }">
+								<text>{{ item.title }}</text>
+							</view>
+						</swiper-item>
+					</swiper>
+				</view>
+
+				<!-- 刮开盲票 -->
+				<view class="ticket-btn flex">
+					<view class="ticket-btn-left flex" @click="toRollingGame">
+						<image src="../../static/index/index_btn_left.png" mode="scaleToFill"></image>
+						<view class="ticket-btn-left__title">试玩</view>
+					</view>
+					<view class="ticket-btn-center flex" @click="payment">
+						<view class="image-wrap flex">
+							<image class="btn" src="../../static/index/index_btn.png" mode="scaleToFill"></image>
+							<image class="shadow" src="../../static/index/index_btn_shadow.png" mode="scaleToFill">
+							</image>
+						</view>
+						<view class="ticket-btn-center-wrap flex">
+							<view class="ticket-btn-center-wrap__title">刮开<br />盲票</view>
+						</view>
+					</view>
+					<view class="ticket-btn-right flex" @click="toTicket">
+						<image src="../../static/index/index_btn_right.png" mode="scaleToFill"></image>
+						<view class="ticket-btn-right__title">更多盲票</view>
+					</view>
+				</view>
+
+				<!-- 盲票价格 -->
+				<view class="ticket-price flex">
+					<view class="ticket-price-amt flex">
+						<view class="num">{{ $numberFormat(ticketInfo.salePrice) }}</view>
+						<view class="txt">元</view>
+					</view>
+					<view class="ticket-price-discount flex" v-if="ticketInfo.originPrice != 0">
+						<view class="num">原价¥{{ $numberFormat(ticketInfo.originPrice) }}</view>
+					</view>
+				</view>
+			</view>
+
+		</view>
+		<!-- 引导页面 -->
+		<u-modal :show="showMp" content='“盲票”已升级为“码上快购”' width='530rpx' confirmText='立即前往' @confirm='toAnotherApplet'></u-modal>
+		<!-- tabbar组件 -->
+		<custom-tab-bar :activeValue="'index'" />
+		<!-- 支付弹框组件 -->
+		<pay-popup :pay-show="payShow" :pay-info="payInfo" @close="close" @success="toProcess" v-if="payShow" />
+	</view>
+</template>
+
+<script>
+	import env from '../../config/env.js'
+	import $http from '@/utils/request.js'
+	import appId from '@/config/appId.js'
+	import CustomTabBar from '../../components/custom-tab-bar/custom-tab-bar.vue'
+	import PayPopup from '../../components/pay-popup/pay-popup.vue'
+	export default {
+		components: {
+			CustomTabBar,
+			PayPopup,
+		},
+		data() {
+			return {
+				loginState: false, // 登录状态
+				ticketList: [], // 盲票列表
+				prizeList: [], // 奖品列表
+				prizeNewsListOne: [], // 弹幕列表
+				prizeNewsListTwo: [], // 弹幕列表
+				payShow: false, // 支付弹框显示
+				payInfo: {}, // 支付详情
+				currentIndex: 0, // 盲票选中下标
+
+				statusHeight: 20,
+				ticketIndex: 0, // 盲票选中下标
+				ticketTitleIndex: 0, // 盲票标题选中下边
+				list: [1, 2, 3, 4, 5],
+				percentage: 0,
+				checkStatus: true,
+				filterActivityList: [],
+				activityTime: null,
+				ticketInfo: {},
+				clickLoading: true,
+				userInfo: '',
+				showMp: false,
+			};
+		},
+		onLoad(opthios) {
+			this.showMp = uni.getStorageSync('anotherApplet') ? true : false
+			
+			uni.hideTabBar()
+			if (opthios.userId) {
+				uni.setStorageSync('shareUid', opthios.userId != 'undefined' ? opthios.userId : null)
+				if (opthios.userId === undefined || opthios.userId === 'undefined') {
+					uni.getSystemInfo({
+						success(res) {
+							log.error(
+								`基础库:${ res.SDKVersion },设备:${ res.model }-${ res.system },页面:/pages/index/index.vue.`
+							)
+						}
+					})
+				}
+			}
+			if (opthios.type) {
+				uni.setStorageSync('shareType', opthios.type)
+			}
+			/**
+			 * 票赢天下小程序分享盲票跳转接受的参数
+			 * shareUid: 用户ID
+			 * shareType: 分享类型
+			 * */
+			if (opthios.scene) {
+				let sceneStr = decodeURIComponent(opthios.scene)
+				this.sceneArr = sceneStr.split('&')
+				uni.setStorageSync('shareUid', this.sceneArr[0])
+				if (this.sceneArr[0] === undefined || this.sceneArr[0] === 'undefined') {
+					uni.getSystemInfo({
+						success(res) {
+							log.error(
+								`基础库:${ res.SDKVersion },设备:${ res.model }-${ res.system },页面:/pages/index/index.vue,来源:票赢天下小程序分享盲票,`
+							)
+						}
+					})
+				}
+				uni.setStorageSync('shareType', this.sceneArr[1])
+			}
+			/**
+			 * 外部app跳转接受的参数
+			 * shareUid: 用户ID
+			 * shareType: 分享类型
+			 * */
+			if (opthios.uid) {
+				uni.setStorageSync('shareUid', opthios.uid != 'undefined' ? opthios.uid : null)
+				if (opthios.uid === undefined || opthios.uid === 'undefined') {
+					uni.getSystemInfo({
+						success(res) {
+							log.error(
+								`基础库:${ res.SDKVersion },设备:${ res.model }-${ res.system },页面:/pages/index/index.vue,来源:外部app,`
+							)
+						}
+					})
+				}
+				uni.setStorageSync('shareType', opthios.t)
+			}
+			// #ifdef MP-WEIXIN
+			const res = uni.getMenuButtonBoundingClientRect()
+			this.statusHeight = res.top //胶囊距离顶部
+			// #endif
+
+			// #ifdef MP-ALIPAY
+			uni.getSystemInfo({
+				success: (res) => {
+					this.statusHeight = res.statusBarHeight + 7
+				}
+			})
+			// #endif
+
+			let num = Math.round(100 / this.list.length)
+			this.percentage = num
+
+
+			this.getList()
+		},
+		onShow() {
+			this.loginState = uni.getStorageSync('token') ? true : false
+			if (this.loginState) {
+				this.getBaseInfo()
+			}
+			this.getPrizeNews()
+			this.getActivityList()
+		},
+		methods: {
+			toAnotherApplet() {
+				/**
+				 * envVersion 类型为字符串
+				 * envVersion: 'develop', //开发版
+				 * envVersion: 'trial', //体验版
+				 * envVersion: 'release',//正式版
+				 */
+				uni.navigateToMiniProgram({
+				    appId:'wxffb4598e70b9f871',// appid
+				    path:'/pages/index/index',// 首页路径
+				    envVersion:"release",
+				    success: res => {
+				      // 打开成功
+				    },
+				})
+			},
+			// 切换盲票
+			changeTicket({
+				detail
+			}) {
+				if (this.clickLoading) {
+					this.clickLoading = false
+					this.ticketIndex = detail.current
+					this.ticketTitleIndex = detail.current
+					this.getTicketDetail(this.ticketList[detail.current].boxId)
+					this.setNum(detail.current)
+					setTimeout(() => {
+						this.clickLoading = true
+					}, 200)
+				}
+			},
+
+			// 切换盲票名称
+			changeTicketTitle({
+				detail
+			}) {
+				if (this.clickLoading) {
+					this.clickLoading = false
+					this.ticketIndex = detail.current
+					this.ticketTitleIndex = detail.current
+					this.getTicketDetail(this.ticketList[detail.current].boxId)
+					this.setNum(detail.current)
+					setTimeout(() => {
+						this.clickLoading = true
+					}, 200)
+				}
+			},
+
+			// 点击名称
+			clickTicketTitle(index) {
+				this.ticketIndex = index
+				this.ticketTitleIndex = index
+				this.getTicketDetail(this.ticketList[index].boxId)
+				this.setNum(index)
+			},
+
+			setNum(index) {
+				let num = Math.round(100 / this.list.length)
+				if (index == 0) {
+					this.percentage = uni.$u.range(0, 100, num)
+				} else if (index == this.list.length - 1) {
+					this.percentage = uni.$u.range(0, 100, 100)
+				} else {
+					this.percentage = uni.$u.range(0, 100, num * (index + 1))
+				}
+			},
+
+			// 投诉建议
+			contactService() {
+				// #ifdef MP-WEIXIN
+				if (appId == 1) {
+					// wx.openCustomerServiceChat({
+					// 	extInfo: {
+					// 		url: 'https://work.weixin.qq.com/kfid/kfc36c0d90028adbd24'
+					// 	},
+					// 	corpId: 'ww02da63d80c66284b',
+					// })
+					uni.navigateTo({
+						url: `/pages/index/wxofficial`
+					})
+				} else {
+					wx.openCustomerServiceChat({
+						extInfo: {
+							url: 'https://work.weixin.qq.com/kfid/kfcf9da505d4dc18c87'
+						},
+						corpId: 'ww8522e336cfe5045b',
+					})
+				}
+				// #endif
+			},
+
+			// 活动
+			getActivityList() {
+				$http.post(`/api/v1/mp/user/marketing/recent`, {}).then(res => {
+					if (res && res.data) {
+						let data = res && res.data
+						let timestamp = parseInt(new Date().getTime())
+						this.activityTime = data.endTime - timestamp
+					}
+				})
+			},
+
+			// 获取盲票列表
+			getList() {
+				uni.showLoading({
+					title: '加载中'
+				});
+				let data = {
+					categoryId: '',
+					tagId: '',
+					type: 'online',
+					noToken: true
+				}
+				$http.post(`/api/v1/mp/user/mall/ticket/list?pageNum=${this.pageNum}&pageSize=100`, data).then(
+					res => {
+						uni.hideLoading();
+						if (res.code == 0) {
+							res.rows.forEach(item => item.picUrl = item.picUrl.split(',').map(item => env.filePublic +
+								item + '?imageView2/2/w/750'))
+							this.ticketList = res.rows
+							this.getTicketDetail(this.ticketList[0].boxId)
+						}
+					}).catch(() => {
+					uni.hideLoading();
+				})
+			},
+
+			// 获取弹幕列表
+			getPrizeNews() {
+				$http.post('/api/v1/mp/user/ticket/hitPrizeBarrage', {}).then(res => {
+					const {
+						listOne,
+						listTwo
+					} = res && res.data
+					listOne.forEach(item => {
+						item.avatar = item.avatar ? env.filePublic + item.avatar : env.filePublic +
+							'70/EJ305PQR2IBE45O9AFAI'
+						item.prizeInfo = item.prizeInfo && (item.prizeInfo.length > 14) ? item.prizeInfo
+							.substring(0, 15) + '...' : item.prizeInfo
+					})
+
+					listTwo.forEach(item => {
+						item.avatar = item.avatar ? env.filePublic + item.avatar : env.filePublic +
+							'70/EJ305PQR2IBE45O9AFAI'
+						item.prizeInfo = item.prizeInfo && (item.prizeInfo.length > 14) ? item.prizeInfo
+							.substring(0, 15) + '...' : item.prizeInfo
+					})
+					this.prizeNewsListOne = listOne
+					this.prizeNewsListTwo = listTwo
+				})
+			},
+
+			// 获取当前盲票的详情
+			getTicketDetail(id) {
+				this.prizeList = []
+				$http.post('/api/v1/mp/user/mall/ticket/detail', {
+					boxId: id,
+					noToken: true
+				}).then(res => {
+					uni.hideLoading();
+					if (res.code == 0) {
+						this.ticketInfo = {
+							...res.data,
+							ticketAwardsLabelList: res.data.ticketAwardsLabelList.map(item => {
+								return {
+									...item,
+									picUrl: env.filePublic + item.picUrl
+								}
+							})
+						}
+						this.payInfo = this.ticketList[this.ticketIndex]
+					}
+				}).catch(() => {
+					uni.hideLoading();
+				})
+			},
+
+			// 立即开刮
+			payment() {
+				this.payInfo = this.ticketList[this.ticketIndex]
+				if (this.payInfo) {
+					let data = {
+						userCouponIds: [],
+						autoCoupon: 1,
+						boxId: this.payInfo.boxId,
+						orderNum: 1,
+						appSource: appId
+					}
+					$http.post('/api/v1/mp/user/ticket/order/settle', data).then(res => {
+						if (res.code == 0) {
+							let info = {
+								...res.data,
+								...this.payInfo,
+								picUrl: this.payInfo.picUrl[0],
+								couponTitle: res.data && res.data.couponList && res.data.couponList.length &&
+									res
+									.data.couponList[0].title,
+								couponId: res.data && res.data.couponList && res.data.couponList.length && res
+									.data
+									.couponList[0].id
+							}
+							this.payInfo = info
+							this.payShow = true
+						}
+					}).catch(() => {
+						uni.$u.toast('开刮失败,请重试!');
+					})
+				} else {
+					uni.$u.toast('盲票正在准备中');
+				}
+
+			},
+
+			// 关闭支付弹框
+			close() {
+				this.payShow = false
+			},
+
+			changeList() {
+				let data = {
+					categoryId: '',
+					tagId: '',
+					type: 'online',
+					noToken: true
+				}
+				$http.post(`/api/v1/mp/user/mall/ticket/list?pageNum=${this.pageNum}&pageSize=100`, data).then(
+					res => {
+						const boxIdStr = this.ticketList.map(item => item.boxId).join()
+						let boxIdStrNew = res && res.rows && res.rows.map(item => item.boxId).join()
+						if (boxIdStr != boxIdStrNew) {
+							this.currentIndex = 0
+							this.getList()
+						}
+					})
+			},
+
+			// 盲票向左箭头
+			ticketLeft() {
+				if ((this.ticketIndex >= 0) && (this.ticketIndex < (this.ticketList.length - 1))) {
+					this.ticketIndex++
+				} else if (this.ticketIndex == (this.ticketList.length - 1)) {
+					this.ticketIndex = 0
+				}
+				this.ticketTitleIndex = this.ticketIndex
+				this.getTicketDetail(this.ticketList[this.ticketTitleIndex].boxId)
+			},
+
+			// 盲票向右箭头
+			ticketRight() {
+				if (this.ticketIndex > 0) {
+					this.ticketIndex--
+				} else if (this.ticketIndex == 0) {
+					this.ticketIndex = this.ticketList.length - 1
+				}
+				this.ticketTitleIndex = this.ticketIndex
+				this.getTicketDetail(this.ticketList[this.ticketTitleIndex].boxId)
+			},
+
+			toRollingGame() {
+				if (!uni.getStorageSync('token')) {
+					uni.navigateTo({
+						url: '/pages/login/index'
+					})
+					return
+				}
+				if (this.ticketInfo && this.ticketInfo.boxId) {
+					uni.navigateTo({
+						url: `/packagePrize/rolling/index?boxId=${ this.ticketInfo.boxId }&isTry=1`
+					})
+				} else {
+					uni.$u.toast('盲票正在准备中');
+				}
+
+			},
+
+			// 线上立即刮票成功,跳转到刮奖过程
+			toProcess(id) {
+				this.payShow = false
+				uni.navigateTo({
+					url: `/packagePrize/rolling/index?boxId=${ this.ticketInfo.boxId }&orderId=${ id }&isTry=0`
+				})
+			},
+
+			// 点击盲票,跳转盲票详情
+			toTicketBox(item) {
+				uni.navigateTo({
+					url: `/pages/ticketBox/detail?boxId=${ item.boxId }`
+				})
+			},
+
+			// 点击奖品,跳转到奖品详情
+			toPrizeGoods(item) {
+				if (item.prizeType == "goods") {
+					uni.navigateTo({
+						url: `/packagePrize/goods/detail?id=${ item.refId }`
+					})
+				}
+				//门店优惠券
+				if (item.prizeType == "coupon") {
+					// if (item.couponType == "1") {
+					// 	uni.navigateTo({
+					// 		url: `/packagePrize/goods/detail?id=426`
+					// 	})
+					// }
+					// if (item.couponType == "2") {
+					// uni.navigateTo({
+					// 	url: `/packagePrize/goods/detail?id=425`
+					// })
+					// }
+					uni.navigateTo({
+						url: `/packagePrize/goods/detail?id=425`
+					})
+				}
+				// 盲豆
+				if (item.prizeType == "coin") {
+					uni.navigateTo({
+						url: `/packagePrize/goods/detail?id=424`
+					})
+				}
+			},
+
+			toActivity() {
+				uni.switchTab({
+					url: '/pages/activity/index'
+				})
+			},
+
+			// 点击所有盲票
+			toTicket() {
+				uni.navigateTo({
+					url: '/packageGoods/ticket/index'
+				})
+			},
+
+			// 点击仓库
+			toPrize() {
+				if (!this.loginState) {
+					uni.navigateTo({
+						url: "/pages/login/index"
+					})
+					return
+				}
+				uni.navigateTo({
+					url: '/packagePrize/prize/index'
+				})
+			},
+
+			// 点击规则说明
+			toRule() {
+				uni.navigateTo({
+					url: '/packageOther/rule/index'
+				})
+			},
+
+			getBaseInfo() {
+				$http.post('/api/v1/mp/user/getLoginUserinfo', {
+					appSource: appId
+				}).then(res => {
+					uni.hideLoading();
+					if (res.code == 0) {
+						this.userInfo = res.data
+					}
+				})
+			},
+		},
+		//分享好友
+		onShareAppMessage(res) {
+			return {
+				title: '盲票,玩的就是有趣',
+				path: '/pages/index/index'
+			}
+		},
+		//分享朋友圈
+		onShareTimeline() {
+			return {
+				title: '盲票,玩的就是有趣',
+				// query: { userId: this.userInfo.userId,
+				// 		type: 1, },
+				query: `userId=${ this.userInfo.userId?this.userInfo.userId:null }&type=1`
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.status_bar {
+		width: 100%;
+		height: var(--status-bar-height);
+	}
+
+	::v-deep .u-tabbar__placeholder {
+		display: none;
+	}
+</style>
+
+<style lang="scss" scoped>
+	.box {
+		position: relative;
+		width: 100%;
+		height: calc(100vh - 50px);
+		background: url(https://mp-public-1310078123.cos.ap-shanghai.myqcloud.com/v2/front_bk.png) center center no-repeat;
+		background-size: 100vw calc(100vh - 50px);
+
+		.index {
+			position: absolute;
+			width: 100%;
+		}
+	}
+
+	// 中奖信息
+	.barrage {
+		position: relative;
+		width: 518rpx;
+		height: 70rpx;
+
+		border-radius: 42rpx;
+		margin-bottom: 16rpx;
+		margin-left: 34rpx;
+
+		&-bg {
+			position: absolute;
+			width: 518rpx;
+			height: 70rpx;
+		}
+
+		&-swiper {
+			position: absolute;
+			z-index: 10;
+			width: 100%;
+			height: 100%;
+			border-radius: 42rpx;
+			overflow: hidden;
+
+			&-item {
+				width: 100%;
+				height: 100%;
+
+				&-content {
+					display: flex;
+					align-items: center;
+					width: 510rpx;
+					height: 70rpx;
+
+					image {
+						width: 58rpx;
+						height: 58rpx;
+						border-radius: 50%;
+						margin-right: 14rpx;
+						border: 1px solid #fff;
+						margin-left: 8rpx;
+					}
+
+					.title {
+						flex: 1;
+						font-size: 26rpx;
+						font-weight: 500;
+						color: #fff;
+					}
+				}
+			}
+		}
+
+		&-none {
+			position: absolute;
+			width: 518rpx;
+			height: 70rpx;
+			z-index: 20;
+		}
+	}
+
+	// 查看规则
+	.rule {
+		display: flex;
+		align-items: center;
+		justify-content: flex-end;
+		height: 34rpx;
+		padding-right: 34rpx;
+		margin-bottom: 24rpx;
+
+		&-content {
+			image {
+				width: 34rpx;
+				height: 34rpx;
+				margin-right: 14rpx;
+			}
+
+			text {
+				font-size: 40rpx;
+				font-family: 'YouSheBiaoTiHei';
+				font-weight: 400;
+				color: #FFFFFF;
+			}
+		}
+	}
+
+	// 盲票
+	.ticket {
+		height: 36vh;
+		position: relative;
+
+		&-swiper {
+			height: 100%;
+
+			&-item {
+				position: relative;
+				height: 100%;
+
+				&-box {
+					position: absolute;
+					bottom: 0;
+					width: 75vw;
+					height: 75%;
+				}
+
+				&-prize {
+					position: absolute;
+					top: 0;
+					width: 85vw;
+					height: 75%;
+					animation: movePrize 2s linear infinite;
+				}
+			}
+		}
+
+		&-left {
+			width: 100rpx;
+			height: 100rpx;
+			position: absolute;
+			top: 45%;
+			left: 0;
+			display: table-cell;
+			vertical-align: middle;
+
+			image {
+				display: block;
+				margin: 25rpx auto;
+				width: 45rpx;
+				height: 40rpx;
+			}
+		}
+
+		&-right {
+			width: 100rpx;
+			height: 100rpx;
+			position: absolute;
+			top: 45%;
+			right: 0;
+			display: table-cell;
+			vertical-align: middle;
+
+			image {
+				display: block;
+				margin: 25rpx auto;
+				width: 45rpx;
+				height: 40rpx;
+				transform: rotate(180deg);
+			}
+		}
+	}
+
+	// 投诉建议
+	.proposal {
+		position: relative;
+		height: 66rpx;
+		margin-bottom: 30rpx;
+
+		&-time {
+			position: absolute;
+			left: 30rpx;
+			bottom: 0;
+			flex-direction: column;
+			align-items: flex-start;
+
+			image {
+				width: 140rpx;
+				height: 78rpx;
+				margin-bottom: 12rpx;
+				animation: scaleTime 3s linear infinite;
+			}
+
+			.time {
+				animation: moveTime 0.5s linear infinite;
+
+				::v-deep .u-count-down__text {
+					line-height: 30rpx;
+					font-size: 30rpx;
+					font-family: YouSheBiaoTiHei;
+					font-weight: 400;
+					color: #FFFFFF;
+				}
+			}
+		}
+
+		&-progress {
+			position: absolute;
+			bottom: 0;
+			width: 140rpx;
+		}
+
+		&-tip {
+			display: flex;
+			align-items: center;
+			position: absolute;
+			right: 0;
+			bottom: 0;
+			width: 212rpx;
+			height: 66rpx;
+
+			image {
+				position: absolute;
+				right: 0;
+				bottom: 0;
+				width: 212rpx;
+				height: 66rpx;
+			}
+
+			text {
+				position: absolute;
+				right: 16rpx;
+				font-size: 40rpx;
+				font-family: YouSheBiaoTiHei;
+				font-weight: 400;
+				color: #FFFFFF;
+			}
+		}
+	}
+
+	// 中奖概率
+	.chance {
+		justify-content: flex-start;
+		height: 44rpx;
+		margin: 0 34rpx 26rpx;
+		background-color: rgba(000, 000, 000, .36);
+		border-radius: 22rpx;
+		color: #FFFFFF;
+		font-family: YouSheBiaoTiHei;
+		font-size: 14px;
+
+		&-title {
+			margin-left: 8rpx;
+		}
+
+		&-hitRate {
+			flex: 1;
+			justify-content: space-evenly;
+
+			&-content {
+
+				image {
+					width: 56rpx;
+					height: 50rpx;
+				}
+			}
+		}
+	}
+
+	// 盲票名称轮播
+	.ticket-title {
+		height: 66rpx;
+		padding: 0 34rpx;
+
+		&-swiper {
+			width: calc(100vw - 34px);
+			height: 100%;
+
+			&-item {
+				height: 100%;
+				background: rgba(255, 255, 255, .16);
+				margin: 0 17rpx;
+				color: #fff;
+				font-size: 34rpx;
+			}
+
+			.action {
+				background: #FFAE00;
+				box-shadow: 0px 3px 3px 0px rgba(220, 145, 107, 0.57);
+			}
+		}
+	}
+
+	// 刮开盲票
+	.ticket-btn {
+		justify-content: space-between;
+		height: 20vh;
+		padding: 0 30rpx;
+
+		&-left {
+			flex-direction: column;
+
+			image {
+				width: 142rpx;
+				height: 142rpx;
+				margin-bottom: 16rpx;
+			}
+
+			&__title {
+				line-height: 30rpx;
+				font-size: 30rpx;
+				font-family: YouSheBiaoTiHei;
+				font-weight: 400;
+				color: #FFFFFF;
+			}
+		}
+
+		&-center {
+			position: relative;
+			flex-direction: column;
+			height: 100%;
+
+			.image-wrap {
+				position: absolute;
+				width: 310rpx;
+				height: 90%;
+				border-radius: 50%;
+				overflow: hidden;
+				box-shadow: 2px 2px 10px rgba(255, 189, 24, .8), -2px -2px 10px rgba(255, 189, 24, .8), 2px -2px 10px rgba(255, 189, 24, .8), -2px 2px 10px rgba(255, 189, 24, .8);
+
+				.btn {
+					width: 310rpx;
+					height: 100%;
+				}
+
+				.shadow {
+					position: absolute;
+					width: 310rpx;
+					height: 130%;
+					left: 0;
+					animation: shadowMove 1.5s linear infinite;
+				}
+			}
+
+			&-wrap {
+				width: 300rpx;
+				position: absolute;
+				animation: scaleBtn 1.5s linear infinite;
+
+				&__title {
+					width: 300rpx;
+					text-align: center;
+					font-size: 84rpx;
+					font-family: YouSheBiaoTiHei;
+					font-weight: 400;
+					color: #FFFFFF;
+					line-height: 72rpx;
+					animation: shadowBtn 1.5s linear infinite;
+				}
+			}
+		}
+
+		&-right {
+			flex-direction: column;
+
+			image {
+				width: 142rpx;
+				height: 142rpx;
+				margin-bottom: 16rpx;
+			}
+
+			&__title {
+				line-height: 30rpx;
+				font-size: 30rpx;
+				font-family: YouSheBiaoTiHei;
+				font-weight: 400;
+				color: #FFFFFF;
+			}
+		}
+	}
+
+	// 盲票价格
+	.ticket-price {
+		height: 44rpx;
+
+		&-checkbox {
+			width: 44rpx;
+			height: 44rpx;
+			background-color: #fff;
+			border-radius: 50%;
+			overflow: hidden;
+			margin-right: 20rpx;
+
+			image {
+				width: 44rpx;
+				height: 44rpx;
+			}
+		}
+
+		&-amt {
+			height: 44rpx;
+			font-family: YouSheBiaoTiHei;
+			font-weight: 400;
+			align-items: flex-end;
+			color: #FFFFFF;
+			margin-right: 20rpx;
+
+			.num {
+				font-size: 56rpx;
+				line-height: 40rpx;
+			}
+
+			.txt {
+				line-height: 36rpx;
+				font-size: 40rpx;
+			}
+		}
+
+		&-discount {
+			height: 44rpx;
+			align-items: flex-end;
+
+			.num {
+				line-height: 26rpx;
+				font-size: 26rpx;
+				text-decoration: line-through;
+				font-style: italic;
+				color: #FFFEFE;
+			}
+		}
+	}
+
+	// 奖品移动动画
+	@keyframes movePrize {
+		0% {
+			transform: translate(0, 10px)
+		}
+
+		25% {
+			transform: translate(0, 5px)
+		}
+
+		50% {
+			transform: translate(0, 0px)
+		}
+
+		75% {
+			transform: translate(0, 5px)
+		}
+
+		100% {
+			transform: translate(0, 10px)
+		}
+	}
+
+	// 倒计时移动动画
+	@keyframes moveTime {
+		0% {
+			transform: translate(2px, 0)
+		}
+
+		25% {
+			transform: translate(0, 0)
+		}
+
+		50% {
+			transform: translate(1px, 0)
+		}
+
+		75% {
+			transform: translate(0, 0)
+		}
+
+		100% {
+			transform: translate(2px, 0)
+		}
+	}
+
+	// 放大缩小动画
+	@keyframes scaleTime {
+		0% {
+			transform: scale(1.05)
+		}
+
+		25% {
+			transform: scale(1.02)
+		}
+
+		50% {
+			transform: scale(0.9)
+		}
+
+		75% {
+			transform: scale(1.02)
+		}
+
+		100% {
+			transform: scale(1.05)
+		}
+	}
+
+	// 刮开刮票呼吸动画
+	@keyframes scaleBtn {
+		0% {
+			transform: scale(1.04)
+		}
+
+		25% {
+			transform: scale(1.02)
+		}
+
+		50% {
+			transform: scale(1)
+		}
+
+		75% {
+			transform: scale(1.02)
+		}
+
+		100% {
+			transform: scale(1.04)
+		}
+	}
+
+	// 刮开刮票阴影动画
+	@keyframes shadowBtn {
+		0% {
+			text-shadow: 2px -2px 3px #fff;
+		}
+
+		25% {
+			text-shadow: none;
+		}
+
+		50% {
+			text-shadow: none;
+		}
+
+		75% {
+			text-shadow: none;
+		}
+
+		100% {
+			text-shadow: 2px -2px 3px #fff;
+		}
+	}
+
+	// 刮开盲票光影移动动画
+	@keyframes shadowMove {
+		0% {
+			left: -100%;
+		}
+
+		100% {
+			left: 110%;
+		}
+	}
+</style>

+ 1206 - 1210
src/pages/index/index.vue

@@ -1,1213 +1,1209 @@
-<template>
-	<view>
-		<view class="box">
-			<view class="index" :style="{ top: statusHeight + 'px' }">
-				<view class="barrage">
-					<!-- 背景 -->
-					<image class="barrage-bg" src="../../static/index/barrage_bg.png" mode="scaleToFill"></image>
-					<!-- 中奖信息轮播 -->
-					<swiper class="barrage-swiper" :interval="2000" :autoplay="true" :vertical="true" :circular="true">
-						<swiper-item v-for="(item, index) in prizeNewsListOne" :key="index">
-							<view class="barrage-swiper-item flex">
-								<view class="barrage-swiper-item-content flex">
-									<image :src="item.avatar" mode="scaleToFill" />
-									<view class="title ells-one">{{ item.nickName }}
-										{{ item.type == 1 ? '刮出了' : '兑换了' }} {{ item.prizeInfo }}
-									</view>
-								</view>
-							</view>
-						</swiper-item>
-					</swiper>
-					<view class="barrage-none"></view>
+<template>
+	<view>
+		<view class="box">
+			<view class="index" :style="{ top: statusHeight + 'px' }">
+				<view class="barrage">
+					<!-- 背景 -->
+					<image class="barrage-bg" src="../../static/index/barrage_bgTwo.png" mode="scaleToFill"></image>
+					<!-- 中奖信息轮播 -->
+					<swiper class="barrage-swiper" :interval="2000" :autoplay="true" :vertical="true" :circular="true">
+						<swiper-item v-for="(item, index) in prizeNewsListOne" :key="index">
+							<view class="barrage-swiper-item flex">
+								<view class="barrage-swiper-item-content flex">
+									<image :src="item.avatar" mode="scaleToFill" />
+									<view class="title ells-one">{{ item.nickName }}
+										{{ item.type == 1 ? '获得了' : '兑换了' }} {{ item.prizeInfo }}
+									</view>
+								</view>
+							</view>
+						</swiper-item>
+					</swiper>
+					<view class="barrage-none"></view>
+				</view>
+
+				<!-- 查看规则 -->
+				<view class="rule">
+					<!-- #ifndef MP-ALIPAY -->
+					<!-- <view class="rule-content flex" @click="contactService">
+						<image src="../../static/index/index_tip_bgTwo.png" mode="scaleToFill"></image>
+						<text>投诉建议</text>
+					</view> -->
+					<view class="rule-content flex" @click="toRule">
+						<image src="../../static/index/index_tip.png" mode="scaleToFill"></image>
+						<text>查看规则</text>
+					</view>
+					<!-- #endif -->
 				</view>
-
-				<!-- 查看规则 -->
-				<view class="rule">
-					<!-- #ifndef MP-ALIPAY -->
-					<view class="rule-content flex" @click="toRule">
-						<image src="../../static/index/index_tip.png" mode="scaleToFill"></image>
-						<text>查看规则</text>
-					</view>
-					<!-- #endif -->
+				
+				<!-- 盲票轮播 -->
+				<view class="ticket">
+					<view class="ticket-bgc" @click="ticketLeft()">
+						<image src="../../static/index/index_anniu.png" mode="scaleToFill"></image>
+					</view>
+					<swiper class="ticket-swiper" :current="ticketIndex" :autoplay="false" :circular="true"
+						:duration="200" @change="changeTicket">
+						<swiper-item v-for="(item, index) in ticketList" :key="index">
+							<view class="ticket-swiper-item flex" @click="toTicketBox(item)">
+								<image class="ticket-swiper-item-box" :src="item.picUrl[0]" mode="aspectFit"></image>
+							</view>
+						</swiper-item>
+					</swiper>
+					<view class="ticket-left" @click="ticketRight()">
+						<image src="../../static/index/index_tip_left.png" mode="scaleToFill"></image>
+					</view>
+					<view class="ticket-right" @click="ticketLeft()">
+						<image src="../../static/index/index_tip_left.png" mode="scaleToFill"></image>
+					</view>
 				</view>
-
-				<!-- 盲票轮播 -->
-				<view class="ticket">
-					<swiper class="ticket-swiper" :current="ticketIndex" :autoplay="false" :circular="true"
-						:duration="200" @change="changeTicket">
-						<swiper-item v-for="(item, index) in ticketList" :key="index">
-							<view class="ticket-swiper-item flex" @click="toTicketBox(item)">
-								<image class="ticket-swiper-item-box" :src="item.picUrl[2]" mode="scaleToFill"></image>
-								<image class="ticket-swiper-item-prize" :src="item.picUrl[1]" mode="scaleToFill">
-								</image>
-							</view>
-						</swiper-item>
-					</swiper>
-					<view class="ticket-left" @click="ticketRight()">
-						<image src="../../static/index/index_tip_left.png" mode="scaleToFill"></image>
-					</view>
-					<view class="ticket-right" @click="ticketLeft()">
-						<image src="../../static/index/index_tip_left.png" mode="scaleToFill"></image>
-					</view>
-
-				</view>
-
-				<!-- 投诉建议 -->
-				<view class="proposal flex">
-					<view class="proposal-time flex" v-if="activityTime && activityTime > 0" @click="toActivity">
-						<image src="../../static/index/index_time_top.png" mode="scaleToFill"></image>
-						<view class="time">
-							<u-count-down :time="activityTime" format="HH:mm:ss:SSS" autoStart millisecond>
-							</u-count-down>
-						</view>
-					</view>
-					<view v-else></view>
-					<view class="proposal-progress">
-						<u-line-progress :percentage="percentage" height="3" :showText="false"
-							inactiveColor="rgba(255, 255, 255, .36)" activeColor="#fff" />
-					</view>
-					<!-- #ifdef MP-WEIXIN -->
-					<view class="proposal-tip" @click="contactService">
-						<image src="../../static/index/index_tip_bg.png" mode="scaleToFill"></image>
-						<text>投诉建议</text>
-					</view>
-					<!-- #endif -->
-
-				</view>
-
-				<!-- 中奖概率 -->
-				<view class="chance flex">
-					<view class="chance-title">中奖概率:</view>
-					<view class="chance-hitRate flex">
-						<view class="chance-hitRate-content flex"
-							v-for="(item, index) in ticketInfo.ticketAwardsLabelList" :key="index">
-							<image :src="item.picUrl" mode="scaleToFill"></image>
-							<text>{{ item.hitRate }}%</text>
-						</view>
-					</view>
-				</view>
-
-				<!-- 盲票名称轮播 -->
-				<view class="ticket-title" flex>
-					<swiper class="ticket-title-swiper flex" :duration="0" :current="ticketTitleIndex"
-						previous-margin="110px" next-margin="110px" :autoplay="false" :circular="true"
-						@change="changeTicketTitle">
-						<swiper-item v-for="(item, index) in ticketList" :key="index">
-							<view class="ticket-title-swiper-item flex" @click="clickTicketTitle(index)"
-								:class="{ 'action': ticketTitleIndex == index }">
-								<text>{{ item.title }}</text>
-							</view>
-						</swiper-item>
-					</swiper>
-				</view>
-
-				<!-- 刮开盲票 -->
-				<view class="ticket-btn flex">
-					<view class="ticket-btn-left flex" @click="toRollingGame">
-						<image src="../../static/index/index_btn_left.png" mode="scaleToFill"></image>
-						<view class="ticket-btn-left__title">试玩</view>
-					</view>
-					<view class="ticket-btn-center flex" @click="payment">
-						<view class="image-wrap flex">
-							<image class="btn" src="../../static/index/index_btn.png" mode="scaleToFill"></image>
-							<image class="shadow" src="../../static/index/index_btn_shadow.png" mode="scaleToFill">
-							</image>
-						</view>
-						<view class="ticket-btn-center-wrap flex">
-							<view class="ticket-btn-center-wrap__title">刮开<br />盲票</view>
-						</view>
-					</view>
-					<view class="ticket-btn-right flex" @click="toTicket">
-						<image src="../../static/index/index_btn_right.png" mode="scaleToFill"></image>
-						<view class="ticket-btn-right__title">更多盲票</view>
-					</view>
-				</view>
-
-				<!-- 盲票价格 -->
-				<view class="ticket-price flex">
-					<view class="ticket-price-amt flex">
-						<view class="num">{{ $numberFormat(ticketInfo.salePrice) }}</view>
-						<view class="txt">元</view>
-					</view>
-					<view class="ticket-price-discount flex" v-if="ticketInfo.originPrice != 0">
-						<view class="num">原价¥{{ $numberFormat(ticketInfo.originPrice) }}</view>
-					</view>
-				</view>
-			</view>
-
-		</view>
-		<!-- 引导页面 -->
-		<u-modal :show="showMp" content='“盲票”已升级为“码上快购”' width='530rpx' confirmText='立即前往' @confirm='toAnotherApplet'></u-modal>
-		<!-- tabbar组件 -->
-		<custom-tab-bar :activeValue="'index'" />
-		<!-- 支付弹框组件 -->
-		<pay-popup :pay-show="payShow" :pay-info="payInfo" @close="close" @success="toProcess" v-if="payShow" />
-	</view>
-</template>
-
-<script>
-	import env from '../../config/env.js'
-	import $http from '@/utils/request.js'
-	import appId from '@/config/appId.js'
-	import CustomTabBar from '../../components/custom-tab-bar/custom-tab-bar.vue'
-	import PayPopup from '../../components/pay-popup/pay-popup.vue'
-	export default {
-		components: {
-			CustomTabBar,
-			PayPopup,
-		},
-		data() {
-			return {
-				loginState: false, // 登录状态
-				ticketList: [], // 盲票列表
-				prizeList: [], // 奖品列表
-				prizeNewsListOne: [], // 弹幕列表
-				prizeNewsListTwo: [], // 弹幕列表
-				payShow: false, // 支付弹框显示
-				payInfo: {}, // 支付详情
-				currentIndex: 0, // 盲票选中下标
-
-				statusHeight: 20,
-				ticketIndex: 0, // 盲票选中下标
-				ticketTitleIndex: 0, // 盲票标题选中下边
-				list: [1, 2, 3, 4, 5],
-				percentage: 0,
-				checkStatus: true,
-				filterActivityList: [],
-				activityTime: null,
-				ticketInfo: {},
-				clickLoading: true,
-				userInfo: '',
-				showMp: false,
-			};
-		},
-		onLoad(opthios) {
-			this.showMp = uni.getStorageSync('anotherApplet') ? true : false
-			
-			uni.hideTabBar()
-			if (opthios.userId) {
-				uni.setStorageSync('shareUid', opthios.userId != 'undefined' ? opthios.userId : null)
-				if (opthios.userId === undefined || opthios.userId === 'undefined') {
-					uni.getSystemInfo({
-						success(res) {
-							log.error(
-								`基础库:${ res.SDKVersion },设备:${ res.model }-${ res.system },页面:/pages/index/index.vue.`
-							)
-						}
-					})
-				}
-			}
-			if (opthios.type) {
-				uni.setStorageSync('shareType', opthios.type)
-			}
-			/**
-			 * 票赢天下小程序分享盲票跳转接受的参数
-			 * shareUid: 用户ID
-			 * shareType: 分享类型
-			 * */
-			if (opthios.scene) {
-				let sceneStr = decodeURIComponent(opthios.scene)
-				this.sceneArr = sceneStr.split('&')
-				uni.setStorageSync('shareUid', this.sceneArr[0])
-				if (this.sceneArr[0] === undefined || this.sceneArr[0] === 'undefined') {
-					uni.getSystemInfo({
-						success(res) {
-							log.error(
-								`基础库:${ res.SDKVersion },设备:${ res.model }-${ res.system },页面:/pages/index/index.vue,来源:票赢天下小程序分享盲票,`
-							)
-						}
-					})
-				}
-				uni.setStorageSync('shareType', this.sceneArr[1])
-			}
-			/**
-			 * 外部app跳转接受的参数
-			 * shareUid: 用户ID
-			 * shareType: 分享类型
-			 * */
-			if (opthios.uid) {
-				uni.setStorageSync('shareUid', opthios.uid != 'undefined' ? opthios.uid : null)
-				if (opthios.uid === undefined || opthios.uid === 'undefined') {
-					uni.getSystemInfo({
-						success(res) {
-							log.error(
-								`基础库:${ res.SDKVersion },设备:${ res.model }-${ res.system },页面:/pages/index/index.vue,来源:外部app,`
-							)
-						}
-					})
-				}
-				uni.setStorageSync('shareType', opthios.t)
-			}
-			// #ifdef MP-WEIXIN
-			const res = uni.getMenuButtonBoundingClientRect()
-			this.statusHeight = res.top //胶囊距离顶部
-			// #endif
-
-			// #ifdef MP-ALIPAY
-			uni.getSystemInfo({
-				success: (res) => {
-					this.statusHeight = res.statusBarHeight + 7
-				}
-			})
-			// #endif
-
-			let num = Math.round(100 / this.list.length)
-			this.percentage = num
-
-
-			this.getList()
-		},
-		onShow() {
-			this.loginState = uni.getStorageSync('token') ? true : false
-			if (this.loginState) {
-				this.getBaseInfo()
-			}
-			this.getPrizeNews()
-			this.getActivityList()
-		},
-		methods: {
-			toAnotherApplet() {
-				/**
-				 * envVersion 类型为字符串
-				 * envVersion: 'develop', //开发版
-				 * envVersion: 'trial', //体验版
-				 * envVersion: 'release',//正式版
-				 */
-				uni.navigateToMiniProgram({
-				    appId:'wxffb4598e70b9f871',// appid
-				    path:'/pages/index/index',// 首页路径
-				    envVersion:"release",
-				    success: res => {
-				      // 打开成功
-				    },
-				})
-			},
-			// 切换盲票
-			changeTicket({
-				detail
-			}) {
-				if (this.clickLoading) {
-					this.clickLoading = false
-					this.ticketIndex = detail.current
-					this.ticketTitleIndex = detail.current
-					this.getTicketDetail(this.ticketList[detail.current].boxId)
-					this.setNum(detail.current)
-					setTimeout(() => {
-						this.clickLoading = true
-					}, 200)
-				}
-			},
-
-			// 切换盲票名称
-			changeTicketTitle({
-				detail
-			}) {
-				if (this.clickLoading) {
-					this.clickLoading = false
-					this.ticketIndex = detail.current
-					this.ticketTitleIndex = detail.current
-					this.getTicketDetail(this.ticketList[detail.current].boxId)
-					this.setNum(detail.current)
-					setTimeout(() => {
-						this.clickLoading = true
-					}, 200)
-				}
-			},
-
-			// 点击名称
-			clickTicketTitle(index) {
-				this.ticketIndex = index
-				this.ticketTitleIndex = index
-				this.getTicketDetail(this.ticketList[index].boxId)
-				this.setNum(index)
-			},
-
-			setNum(index) {
-				let num = Math.round(100 / this.list.length)
-				if (index == 0) {
-					this.percentage = uni.$u.range(0, 100, num)
-				} else if (index == this.list.length - 1) {
-					this.percentage = uni.$u.range(0, 100, 100)
-				} else {
-					this.percentage = uni.$u.range(0, 100, num * (index + 1))
-				}
-			},
-
-			// 投诉建议
-			contactService() {
-				// #ifdef MP-WEIXIN
-				if (appId == 1) {
-					// wx.openCustomerServiceChat({
-					// 	extInfo: {
-					// 		url: 'https://work.weixin.qq.com/kfid/kfc36c0d90028adbd24'
-					// 	},
-					// 	corpId: 'ww02da63d80c66284b',
-					// })
-					uni.navigateTo({
-						url: `/pages/index/wxofficial`
-					})
-				} else {
-					wx.openCustomerServiceChat({
-						extInfo: {
-							url: 'https://work.weixin.qq.com/kfid/kfcf9da505d4dc18c87'
-						},
-						corpId: 'ww8522e336cfe5045b',
-					})
-				}
-				// #endif
-			},
-
-			// 活动
-			getActivityList() {
-				$http.post(`/api/v1/mp/user/marketing/recent`, {}).then(res => {
-					if (res && res.data) {
-						let data = res && res.data
-						let timestamp = parseInt(new Date().getTime())
-						this.activityTime = data.endTime - timestamp
-					}
-				})
-			},
-
-			// 获取盲票列表
-			getList() {
-				uni.showLoading({
-					title: '加载中'
-				});
-				let data = {
-					categoryId: '',
-					tagId: '',
-					type: 'online',
-					noToken: true
-				}
-				$http.post(`/api/v1/mp/user/mall/ticket/list?pageNum=${this.pageNum}&pageSize=100`, data).then(
-					res => {
-						uni.hideLoading();
-						if (res.code == 0) {
-							res.rows.forEach(item => item.picUrl = item.picUrl.split(',').map(item => env.filePublic +
-								item + '?imageView2/2/w/750'))
-							this.ticketList = res.rows
-							this.getTicketDetail(this.ticketList[0].boxId)
-						}
-					}).catch(() => {
-					uni.hideLoading();
-				})
-			},
-
-			// 获取弹幕列表
-			getPrizeNews() {
-				$http.post('/api/v1/mp/user/ticket/hitPrizeBarrage', {}).then(res => {
-					const {
-						listOne,
-						listTwo
-					} = res && res.data
-					listOne.forEach(item => {
-						item.avatar = item.avatar ? env.filePublic + item.avatar : env.filePublic +
-							'70/EJ305PQR2IBE45O9AFAI'
-						item.prizeInfo = item.prizeInfo && (item.prizeInfo.length > 14) ? item.prizeInfo
-							.substring(0, 15) + '...' : item.prizeInfo
-					})
-
-					listTwo.forEach(item => {
-						item.avatar = item.avatar ? env.filePublic + item.avatar : env.filePublic +
-							'70/EJ305PQR2IBE45O9AFAI'
-						item.prizeInfo = item.prizeInfo && (item.prizeInfo.length > 14) ? item.prizeInfo
-							.substring(0, 15) + '...' : item.prizeInfo
-					})
-					this.prizeNewsListOne = listOne
-					this.prizeNewsListTwo = listTwo
-				})
-			},
-
-			// 获取当前盲票的详情
-			getTicketDetail(id) {
-				this.prizeList = []
-				$http.post('/api/v1/mp/user/mall/ticket/detail', {
-					boxId: id,
-					noToken: true
-				}).then(res => {
-					uni.hideLoading();
-					if (res.code == 0) {
-						this.ticketInfo = {
-							...res.data,
-							ticketAwardsLabelList: res.data.ticketAwardsLabelList.map(item => {
-								return {
-									...item,
-									picUrl: env.filePublic + item.picUrl
-								}
-							})
-						}
-						this.payInfo = this.ticketList[this.ticketIndex]
-					}
-				}).catch(() => {
-					uni.hideLoading();
-				})
-			},
-
-			// 立即开刮
-			payment() {
-				this.payInfo = this.ticketList[this.ticketIndex]
-				if (this.payInfo) {
-					let data = {
-						userCouponIds: [],
-						autoCoupon: 1,
-						boxId: this.payInfo.boxId,
-						orderNum: 1,
-						appSource: appId
-					}
-					$http.post('/api/v1/mp/user/ticket/order/settle', data).then(res => {
-						if (res.code == 0) {
-							let info = {
-								...res.data,
-								...this.payInfo,
-								picUrl: this.payInfo.picUrl[0],
-								couponTitle: res.data && res.data.couponList && res.data.couponList.length &&
-									res
-									.data.couponList[0].title,
-								couponId: res.data && res.data.couponList && res.data.couponList.length && res
-									.data
-									.couponList[0].id
-							}
-							this.payInfo = info
-							this.payShow = true
-						}
-					}).catch(() => {
-						uni.$u.toast('开刮失败,请重试!');
-					})
-				} else {
-					uni.$u.toast('盲票正在准备中');
-				}
-
-			},
-
-			// 关闭支付弹框
-			close() {
-				this.payShow = false
-			},
-
-			changeList() {
-				let data = {
-					categoryId: '',
-					tagId: '',
-					type: 'online',
-					noToken: true
-				}
-				$http.post(`/api/v1/mp/user/mall/ticket/list?pageNum=${this.pageNum}&pageSize=100`, data).then(
-					res => {
-						const boxIdStr = this.ticketList.map(item => item.boxId).join()
-						let boxIdStrNew = res && res.rows && res.rows.map(item => item.boxId).join()
-						if (boxIdStr != boxIdStrNew) {
-							this.currentIndex = 0
-							this.getList()
-						}
-					})
-			},
-
-			// 盲票向左箭头
-			ticketLeft() {
-				if ((this.ticketIndex >= 0) && (this.ticketIndex < (this.ticketList.length - 1))) {
-					this.ticketIndex++
-				} else if (this.ticketIndex == (this.ticketList.length - 1)) {
-					this.ticketIndex = 0
-				}
-				this.ticketTitleIndex = this.ticketIndex
-				this.getTicketDetail(this.ticketList[this.ticketTitleIndex].boxId)
-			},
-
-			// 盲票向右箭头
-			ticketRight() {
-				if (this.ticketIndex > 0) {
-					this.ticketIndex--
-				} else if (this.ticketIndex == 0) {
-					this.ticketIndex = this.ticketList.length - 1
-				}
-				this.ticketTitleIndex = this.ticketIndex
-				this.getTicketDetail(this.ticketList[this.ticketTitleIndex].boxId)
-			},
-
-			toRollingGame() {
-				if (!uni.getStorageSync('token')) {
-					uni.navigateTo({
-						url: '/pages/login/index'
-					})
-					return
-				}
-				if (this.ticketInfo && this.ticketInfo.boxId) {
-					uni.navigateTo({
-						url: `/packagePrize/rolling/index?boxId=${ this.ticketInfo.boxId }&isTry=1`
-					})
-				} else {
-					uni.$u.toast('盲票正在准备中');
-				}
-
-			},
-
-			// 线上立即刮票成功,跳转到刮奖过程
-			toProcess(id) {
-				this.payShow = false
-				uni.navigateTo({
-					url: `/packagePrize/rolling/index?boxId=${ this.ticketInfo.boxId }&orderId=${ id }&isTry=0`
-				})
-			},
-
-			// 点击盲票,跳转盲票详情
-			toTicketBox(item) {
-				uni.navigateTo({
-					url: `/pages/ticketBox/detail?boxId=${ item.boxId }`
-				})
-			},
-
-			// 点击奖品,跳转到奖品详情
-			toPrizeGoods(item) {
-				if (item.prizeType == "goods") {
-					uni.navigateTo({
-						url: `/packagePrize/goods/detail?id=${ item.refId }`
-					})
-				}
-				//门店优惠券
-				if (item.prizeType == "coupon") {
-					// if (item.couponType == "1") {
-					// 	uni.navigateTo({
-					// 		url: `/packagePrize/goods/detail?id=426`
-					// 	})
-					// }
-					// if (item.couponType == "2") {
-					// uni.navigateTo({
-					// 	url: `/packagePrize/goods/detail?id=425`
-					// })
-					// }
-					uni.navigateTo({
-						url: `/packagePrize/goods/detail?id=425`
-					})
-				}
-				// 盲豆
-				if (item.prizeType == "coin") {
-					uni.navigateTo({
-						url: `/packagePrize/goods/detail?id=424`
-					})
-				}
-			},
-
-			toActivity() {
-				uni.switchTab({
-					url: '/pages/activity/index'
-				})
-			},
-
-			// 点击所有盲票
-			toTicket() {
-				uni.navigateTo({
-					url: '/packageGoods/ticket/index'
-				})
-			},
-
-			// 点击仓库
-			toPrize() {
-				if (!this.loginState) {
-					uni.navigateTo({
-						url: "/pages/login/index"
-					})
-					return
-				}
-				uni.navigateTo({
-					url: '/packagePrize/prize/index'
-				})
-			},
-
-			// 点击规则说明
-			toRule() {
-				uni.navigateTo({
-					url: '/packageOther/rule/index'
-				})
-			},
-
-			getBaseInfo() {
-				$http.post('/api/v1/mp/user/getLoginUserinfo', {
-					appSource: appId
-				}).then(res => {
-					uni.hideLoading();
-					if (res.code == 0) {
-						this.userInfo = res.data
-					}
-				})
-			},
-		},
-		//分享好友
-		onShareAppMessage(res) {
-			return {
-				title: '盲票,玩的就是有趣',
-				path: '/pages/index/index'
-			}
-		},
-		//分享朋友圈
-		onShareTimeline() {
-			return {
-				title: '盲票,玩的就是有趣',
-				// query: { userId: this.userInfo.userId,
-				// 		type: 1, },
-				query: `userId=${ this.userInfo.userId?this.userInfo.userId:null }&type=1`
-			}
-		}
-	}
-</script>
-
-<style lang="scss" scoped>
-	.status_bar {
-		width: 100%;
-		height: var(--status-bar-height);
-	}
-
-	::v-deep .u-tabbar__placeholder {
-		display: none;
-	}
-</style>
-
-<style lang="scss" scoped>
-	.box {
-		position: relative;
-		width: 100%;
-		height: calc(100vh - 50px);
-		background: url(https://mp-public-1310078123.cos.ap-shanghai.myqcloud.com/v2/front_bk.png) center center no-repeat;
-		background-size: 100vw calc(100vh - 50px);
-
-		.index {
-			position: absolute;
-			width: 100%;
-		}
-	}
-
-	// 中奖信息
-	.barrage {
-		position: relative;
-		width: 518rpx;
-		height: 70rpx;
-
-		border-radius: 42rpx;
-		margin-bottom: 16rpx;
-		margin-left: 34rpx;
-
-		&-bg {
-			position: absolute;
-			width: 518rpx;
-			height: 70rpx;
-		}
-
-		&-swiper {
-			position: absolute;
-			z-index: 10;
-			width: 100%;
-			height: 100%;
-			border-radius: 42rpx;
-			overflow: hidden;
-
-			&-item {
-				width: 100%;
-				height: 100%;
-
-				&-content {
-					display: flex;
-					align-items: center;
-					width: 510rpx;
-					height: 70rpx;
-
-					image {
-						width: 58rpx;
-						height: 58rpx;
-						border-radius: 50%;
-						margin-right: 14rpx;
-						border: 1px solid #fff;
-						margin-left: 8rpx;
-					}
-
-					.title {
-						flex: 1;
-						font-size: 26rpx;
-						font-weight: 500;
-						color: #fff;
-					}
-				}
-			}
-		}
-
-		&-none {
-			position: absolute;
-			width: 518rpx;
-			height: 70rpx;
-			z-index: 20;
-		}
-	}
-
-	// 查看规则
-	.rule {
-		display: flex;
-		align-items: center;
-		justify-content: flex-end;
-		height: 34rpx;
-		padding-right: 34rpx;
-		margin-bottom: 24rpx;
-
-		&-content {
-			image {
-				width: 34rpx;
-				height: 34rpx;
-				margin-right: 14rpx;
-			}
-
-			text {
-				font-size: 40rpx;
-				font-family: 'YouSheBiaoTiHei';
-				font-weight: 400;
-				color: #FFFFFF;
-			}
-		}
-	}
-
-	// 盲票
-	.ticket {
-		height: 36vh;
-		position: relative;
-
-		&-swiper {
-			height: 100%;
-
-			&-item {
-				position: relative;
-				height: 100%;
-
-				&-box {
-					position: absolute;
-					bottom: 0;
-					width: 75vw;
-					height: 75%;
-				}
-
-				&-prize {
-					position: absolute;
-					top: 0;
-					width: 85vw;
-					height: 75%;
-					animation: movePrize 2s linear infinite;
-				}
-			}
-		}
-
-		&-left {
-			width: 100rpx;
-			height: 100rpx;
-			position: absolute;
-			top: 45%;
-			left: 0;
-			display: table-cell;
-			vertical-align: middle;
-
-			image {
-				display: block;
-				margin: 25rpx auto;
-				width: 45rpx;
-				height: 40rpx;
-			}
-		}
-
-		&-right {
-			width: 100rpx;
-			height: 100rpx;
-			position: absolute;
-			top: 45%;
-			right: 0;
-			display: table-cell;
-			vertical-align: middle;
-
-			image {
-				display: block;
-				margin: 25rpx auto;
-				width: 45rpx;
-				height: 40rpx;
-				transform: rotate(180deg);
-			}
-		}
-	}
-
-	// 投诉建议
-	.proposal {
-		position: relative;
-		height: 66rpx;
-		margin-bottom: 30rpx;
-
-		&-time {
-			position: absolute;
-			left: 30rpx;
-			bottom: 0;
-			flex-direction: column;
-			align-items: flex-start;
-
-			image {
-				width: 140rpx;
-				height: 78rpx;
-				margin-bottom: 12rpx;
-				animation: scaleTime 3s linear infinite;
-			}
-
-			.time {
-				animation: moveTime 0.5s linear infinite;
-
-				::v-deep .u-count-down__text {
-					line-height: 30rpx;
-					font-size: 30rpx;
-					font-family: YouSheBiaoTiHei;
-					font-weight: 400;
-					color: #FFFFFF;
-				}
-			}
-		}
-
-		&-progress {
-			position: absolute;
-			bottom: 0;
-			width: 140rpx;
-		}
-
-		&-tip {
-			display: flex;
-			align-items: center;
-			position: absolute;
-			right: 0;
-			bottom: 0;
-			width: 212rpx;
-			height: 66rpx;
-
-			image {
-				position: absolute;
-				right: 0;
-				bottom: 0;
-				width: 212rpx;
-				height: 66rpx;
-			}
-
-			text {
-				position: absolute;
-				right: 16rpx;
-				font-size: 40rpx;
-				font-family: YouSheBiaoTiHei;
-				font-weight: 400;
-				color: #FFFFFF;
-			}
-		}
-	}
-
-	// 中奖概率
-	.chance {
-		justify-content: flex-start;
-		height: 44rpx;
-		margin: 0 34rpx 26rpx;
-		background-color: rgba(000, 000, 000, .36);
-		border-radius: 22rpx;
-		color: #FFFFFF;
-		font-family: YouSheBiaoTiHei;
-		font-size: 14px;
-
-		&-title {
-			margin-left: 8rpx;
-		}
-
-		&-hitRate {
-			flex: 1;
-			justify-content: space-evenly;
-
-			&-content {
-
-				image {
-					width: 56rpx;
-					height: 50rpx;
-				}
-			}
-		}
-	}
-
-	// 盲票名称轮播
-	.ticket-title {
-		height: 66rpx;
-		padding: 0 34rpx;
-
-		&-swiper {
-			width: calc(100vw - 34px);
-			height: 100%;
-
-			&-item {
-				height: 100%;
-				background: rgba(255, 255, 255, .16);
-				margin: 0 17rpx;
-				color: #fff;
-				font-size: 34rpx;
-			}
-
-			.action {
-				background: #FFAE00;
-				box-shadow: 0px 3px 3px 0px rgba(220, 145, 107, 0.57);
-			}
-		}
-	}
-
-	// 刮开盲票
-	.ticket-btn {
-		justify-content: space-between;
-		height: 20vh;
-		padding: 0 30rpx;
-
-		&-left {
-			flex-direction: column;
-
-			image {
-				width: 142rpx;
-				height: 142rpx;
-				margin-bottom: 16rpx;
-			}
-
-			&__title {
-				line-height: 30rpx;
-				font-size: 30rpx;
-				font-family: YouSheBiaoTiHei;
-				font-weight: 400;
-				color: #FFFFFF;
-			}
-		}
-
-		&-center {
-			position: relative;
-			flex-direction: column;
-			height: 100%;
-
-			.image-wrap {
-				position: absolute;
-				width: 310rpx;
-				height: 90%;
-				border-radius: 50%;
-				overflow: hidden;
-				box-shadow: 2px 2px 10px rgba(255, 189, 24, .8), -2px -2px 10px rgba(255, 189, 24, .8), 2px -2px 10px rgba(255, 189, 24, .8), -2px 2px 10px rgba(255, 189, 24, .8);
-
-				.btn {
-					width: 310rpx;
-					height: 100%;
-				}
-
-				.shadow {
-					position: absolute;
-					width: 310rpx;
-					height: 130%;
-					left: 0;
-					animation: shadowMove 1.5s linear infinite;
-				}
-			}
-
-			&-wrap {
-				width: 300rpx;
-				position: absolute;
-				animation: scaleBtn 1.5s linear infinite;
-
-				&__title {
-					width: 300rpx;
-					text-align: center;
-					font-size: 84rpx;
-					font-family: YouSheBiaoTiHei;
-					font-weight: 400;
-					color: #FFFFFF;
-					line-height: 72rpx;
-					animation: shadowBtn 1.5s linear infinite;
-				}
-			}
-		}
-
-		&-right {
-			flex-direction: column;
-
-			image {
-				width: 142rpx;
-				height: 142rpx;
-				margin-bottom: 16rpx;
-			}
-
-			&__title {
-				line-height: 30rpx;
-				font-size: 30rpx;
-				font-family: YouSheBiaoTiHei;
-				font-weight: 400;
-				color: #FFFFFF;
-			}
-		}
-	}
-
-	// 盲票价格
-	.ticket-price {
-		height: 44rpx;
-
-		&-checkbox {
-			width: 44rpx;
-			height: 44rpx;
-			background-color: #fff;
-			border-radius: 50%;
-			overflow: hidden;
-			margin-right: 20rpx;
-
-			image {
-				width: 44rpx;
-				height: 44rpx;
-			}
-		}
-
-		&-amt {
-			height: 44rpx;
-			font-family: YouSheBiaoTiHei;
-			font-weight: 400;
-			align-items: flex-end;
-			color: #FFFFFF;
-			margin-right: 20rpx;
-
-			.num {
-				font-size: 56rpx;
-				line-height: 40rpx;
-			}
-
-			.txt {
-				line-height: 36rpx;
-				font-size: 40rpx;
-			}
-		}
-
-		&-discount {
-			height: 44rpx;
-			align-items: flex-end;
-
-			.num {
-				line-height: 26rpx;
-				font-size: 26rpx;
-				text-decoration: line-through;
-				font-style: italic;
-				color: #FFFEFE;
-			}
-		}
-	}
-
-	// 奖品移动动画
-	@keyframes movePrize {
-		0% {
-			transform: translate(0, 10px)
-		}
-
-		25% {
-			transform: translate(0, 5px)
-		}
-
-		50% {
-			transform: translate(0, 0px)
-		}
-
-		75% {
-			transform: translate(0, 5px)
-		}
-
-		100% {
-			transform: translate(0, 10px)
-		}
-	}
-
-	// 倒计时移动动画
-	@keyframes moveTime {
-		0% {
-			transform: translate(2px, 0)
-		}
-
-		25% {
-			transform: translate(0, 0)
-		}
-
-		50% {
-			transform: translate(1px, 0)
-		}
-
-		75% {
-			transform: translate(0, 0)
-		}
-
-		100% {
-			transform: translate(2px, 0)
-		}
-	}
-
-	// 放大缩小动画
-	@keyframes scaleTime {
-		0% {
-			transform: scale(1.05)
-		}
-
-		25% {
-			transform: scale(1.02)
-		}
-
-		50% {
-			transform: scale(0.9)
-		}
-
-		75% {
-			transform: scale(1.02)
-		}
-
-		100% {
-			transform: scale(1.05)
-		}
-	}
-
-	// 刮开刮票呼吸动画
-	@keyframes scaleBtn {
-		0% {
-			transform: scale(1.04)
-		}
-
-		25% {
-			transform: scale(1.02)
-		}
-
-		50% {
-			transform: scale(1)
-		}
-
-		75% {
-			transform: scale(1.02)
-		}
-
-		100% {
-			transform: scale(1.04)
-		}
-	}
-
-	// 刮开刮票阴影动画
-	@keyframes shadowBtn {
-		0% {
-			text-shadow: 2px -2px 3px #fff;
-		}
-
-		25% {
-			text-shadow: none;
-		}
-
-		50% {
-			text-shadow: none;
-		}
-
-		75% {
-			text-shadow: none;
-		}
-
-		100% {
-			text-shadow: 2px -2px 3px #fff;
-		}
-	}
-
-	// 刮开盲票光影移动动画
-	@keyframes shadowMove {
-		0% {
-			left: -100%;
-		}
-
-		100% {
-			left: 110%;
-		}
-	}
+				
+				<!-- 投诉建议 -->
+				<view class="proposal flex">
+					<view class="proposal-time flex" v-if="activityTime && activityTime > 0" @click="toActivity">
+						<image src="../../static/index/index_time_top.png" mode="scaleToFill"></image>
+						<view class="time">
+							<u-count-down :time="activityTime" format="HH:mm:ss:SSS" autoStart millisecond>
+							</u-count-down>
+						</view>
+					</view>
+					<view v-else></view>
+					<view class="proposal-progress">
+						<u-line-progress :percentage="percentage" height="3" :showText="false"
+							inactiveColor="rgba(255, 255, 255, .36)" activeColor="#fff" />
+					</view>
+				</view>
+
+				<!-- 盲票名称轮播 -->
+				<view class="ticket-title" flex>
+					<swiper class="ticket-title-swiper flex" :duration="0" :current="ticketTitleIndex"
+						previous-margin="80px" next-margin="80px" :autoplay="false" :circular="true"
+						@change="changeTicketTitle">
+						<swiper-item v-for="(item, index) in ticketList" :key="index">
+							<view class="ticket-title-swiper-item flex" @click="clickTicketTitle(index)"
+								:class="{ 'action': ticketTitleIndex == index }">
+								<text class="ells-one">{{ item.title }}</text>
+							</view>
+						</swiper-item>
+					</swiper>
+				</view>
+
+				<!-- 刮开盲票 -->
+				<view class="ticket-btn flex">
+					<view class="ticket-btn-left flex" @click="toRollingGame">
+						<image src="../../static/index/index_duihuandating.png" mode="scaleToFill"></image>
+						<view class="ticket-btn-left__title">兑换大厅</view>
+					</view>
+					<view class="ticket-btn-center flex" @click="payment">
+						<view class="image-wrap flex">
+							<image class="btn" src="../../static/index/index_btn.png" mode="scaleToFill"></image>
+							<image class="shadow" src="../../static/index/index_btn_shadow.png" mode="scaleToFill">
+							</image>
+						</view>
+						<view class="ticket-btn-center-wrap flex">
+							<view class="ticket-btn-center-wrap__title">购买<br />有礼</view>
+						</view>
+					</view>
+					<view class="ticket-btn-right flex" @click="toTicket">
+						<image src="../../static/index/index_btn_right.png" mode="scaleToFill"></image>
+						<view class="ticket-btn-right__title">更多商品</view>
+					</view>
+				</view>
+
+				<!-- 盲票价格 -->
+				<view class="ticket-price flex">
+					<view class="ticket-price-amt flex">
+						<view class="num">{{ $numberFormat(ticketInfo.salePrice) }}</view>
+						<view class="txt">元</view>
+					</view>
+					<view class="ticket-price-discount flex" v-if="ticketInfo.originPrice != 0">
+						<view class="num">原价¥{{ $numberFormat(ticketInfo.originPrice) }}</view>
+					</view>
+				</view>
+			</view>
+
+		</view>
+		<!-- 引导页面 -->
+		<!-- <u-modal :show="showMp" content='“盲票”已升级为“码上快购”' width='530rpx' confirmText='立即前往' @confirm='toAnotherApplet'> -->
+		</u-modal>
+		<!-- tabbar组件 -->
+		<custom-tab-bar :activeValue="'index'" />
+		<!-- 支付弹框组件 -->
+		<pay-popup :pay-show="payShow" :pay-info="payInfo" @close="close" @success="toProcess" v-if="payShow" />
+	</view>
+</template>
+
+<script>
+	import env from '../../config/env.js'
+	import $http from '@/utils/request.js'
+	import appId from '@/config/appId.js'
+	import CustomTabBar from '../../components/custom-tab-bar/custom-tab-bar.vue'
+	import PayPopup from '../../components/pay-popup/pay-popup.vue'
+	export default {
+		components: {
+			CustomTabBar,
+			PayPopup,
+		},
+		data() {
+			return {
+				loginState: false, // 登录状态
+				ticketList: [], // 盲票列表
+				prizeList: [], // 奖品列表
+				prizeNewsListOne: [], // 弹幕列表
+				prizeNewsListTwo: [], // 弹幕列表
+				payShow: false, // 支付弹框显示
+				payInfo: {}, // 支付详情
+				currentIndex: 0, // 盲票选中下标
+
+				statusHeight: 20,
+				ticketIndex: 0, // 盲票选中下标
+				ticketTitleIndex: 0, // 盲票标题选中下边
+				list: [1, 2, 3, 4, 5],
+				percentage: 0,
+				checkStatus: true,
+				filterActivityList: [],
+				activityTime: null,
+				ticketInfo: {},
+				clickLoading: true,
+				userInfo: '',
+				showMp: false,
+				pageNum: 1,
+			};
+		},
+		onLoad(opthios) {
+			this.showMp = uni.getStorageSync('anotherApplet') ? true : false
+
+			uni.hideTabBar()
+			if (opthios.userId) {
+				uni.setStorageSync('shareUid', opthios.userId != 'undefined' ? opthios.userId : null)
+				if (opthios.userId === undefined || opthios.userId === 'undefined') {
+					uni.getSystemInfo({
+						success(res) {
+							log.error(
+								`基础库:${ res.SDKVersion },设备:${ res.model }-${ res.system },页面:/pages/index/index.vue.`
+							)
+						}
+					})
+				}
+			}
+			if (opthios.type) {
+				uni.setStorageSync('shareType', opthios.type)
+			}
+			/**
+			 * 票赢天下小程序分享盲票跳转接受的参数
+			 * shareUid: 用户ID
+			 * shareType: 分享类型
+			 * */
+			if (opthios.scene) {
+				let sceneStr = decodeURIComponent(opthios.scene)
+				this.sceneArr = sceneStr.split('&')
+				uni.setStorageSync('shareUid', this.sceneArr[0])
+				if (this.sceneArr[0] === undefined || this.sceneArr[0] === 'undefined') {
+					uni.getSystemInfo({
+						success(res) {
+							log.error(
+								`基础库:${ res.SDKVersion },设备:${ res.model }-${ res.system },页面:/pages/index/index.vue,来源:票赢天下小程序分享盲票,`
+							)
+						}
+					})
+				}
+				uni.setStorageSync('shareType', this.sceneArr[1])
+			}
+			/**
+			 * 外部app跳转接受的参数
+			 * shareUid: 用户ID
+			 * shareType: 分享类型
+			 * */
+			if (opthios.uid) {
+				uni.setStorageSync('shareUid', opthios.uid != 'undefined' ? opthios.uid : null)
+				if (opthios.uid === undefined || opthios.uid === 'undefined') {
+					uni.getSystemInfo({
+						success(res) {
+							log.error(
+								`基础库:${ res.SDKVersion },设备:${ res.model }-${ res.system },页面:/pages/index/index.vue,来源:外部app,`
+							)
+						}
+					})
+				}
+				uni.setStorageSync('shareType', opthios.t)
+			}
+			// #ifdef MP-WEIXIN
+			const res = uni.getMenuButtonBoundingClientRect()
+			this.statusHeight = res.top //胶囊距离顶部
+			// #endif
+
+			// #ifdef MP-ALIPAY
+			uni.getSystemInfo({
+				success: (res) => {
+					this.statusHeight = res.statusBarHeight + 7
+				}
+			})
+			// #endif
+
+			let num = Math.round(100 / this.list.length)
+			this.percentage = num
+
+
+			this.getList()
+		},
+		onShow() {
+			this.loginState = uni.getStorageSync('token') ? true : false
+			if (this.loginState) {
+				this.getBaseInfo()
+			}
+			this.getPrizeNews()
+			this.getActivityList()
+		},
+		methods: {
+			toAnotherApplet() {
+				/**
+				 * envVersion 类型为字符串
+				 * envVersion: 'develop', //开发版
+				 * envVersion: 'trial', //体验版
+				 * envVersion: 'release',//正式版
+				 */
+				uni.navigateToMiniProgram({
+					appId: 'wxffb4598e70b9f871', // appid
+					path: '/pages/index/index', // 首页路径
+					envVersion: "release",
+					success: res => {
+						// 打开成功
+					},
+				})
+			},
+			// 切换盲票
+			changeTicket({
+				detail
+			}) {
+				if (this.clickLoading) {
+					this.clickLoading = false
+					this.ticketIndex = detail.current
+					this.ticketTitleIndex = detail.current
+					this.getTicketDetail(this.ticketList[detail.current].boxId)
+					this.setNum(detail.current)
+					setTimeout(() => {
+						this.clickLoading = true
+					}, 200)
+				}
+			},
+
+			// 切换盲票名称
+			changeTicketTitle({
+				detail
+			}) {
+				if (this.clickLoading) {
+					this.clickLoading = false
+					this.ticketIndex = detail.current
+					this.ticketTitleIndex = detail.current
+					this.getTicketDetail(this.ticketList[detail.current].boxId)
+					this.setNum(detail.current)
+					setTimeout(() => {
+						this.clickLoading = true
+					}, 200)
+				}
+			},
+
+			// 点击名称
+			clickTicketTitle(index) {
+				this.ticketIndex = index
+				this.ticketTitleIndex = index
+				this.getTicketDetail(this.ticketList[index].boxId)
+				this.setNum(index)
+			},
+
+			setNum(index) {
+				let num = Math.round(100 / this.list.length)
+				if (index == 0) {
+					this.percentage = uni.$u.range(0, 100, num)
+				} else if (index == this.list.length - 1) {
+					this.percentage = uni.$u.range(0, 100, 100)
+				} else {
+					this.percentage = uni.$u.range(0, 100, num * (index + 1))
+				}
+			},
+
+			// 投诉建议
+			contactService() {
+				// #ifdef MP-WEIXIN
+				if (appId == 1) {
+					uni.navigateTo({
+						url: `/pages/index/wxofficial`
+					})
+				} else {
+					wx.openCustomerServiceChat({
+						extInfo: {
+							url: 'https://work.weixin.qq.com/kfid/kfcf9da505d4dc18c87'
+						},
+						corpId: 'ww8522e336cfe5045b',
+					})
+				}
+				// #endif
+			},
+
+			// 活动
+			getActivityList() {
+				$http.post(`/api/v1/mp/user/marketing/recent`, {}).then(res => {
+					if (res && res.data) {
+						let data = res && res.data
+						let timestamp = parseInt(new Date().getTime())
+						this.activityTime = data.endTime - timestamp
+					}
+				})
+			},
+
+			// 获取盲票列表
+			getList() {
+				uni.showLoading({
+					title: '加载中'
+				});
+				let data = {
+					type: 'online',
+					noToken: true
+				}
+				$http.post(`/api/v1/mp/user/mall/ticket/goods/list?pageNum=${this.pageNum}&pageSize=100`, data).then(
+					res => {
+						uni.hideLoading();
+						if (res.code == 0) {
+							res.rows.forEach(item => item.picUrl = item.picUrl.split(',').map(item => env.filePublic +
+								item + '?imageView2/2/w/750'))
+							this.ticketList = res.rows
+							this.getTicketDetail(this.ticketList[0].boxId)
+						}
+					}).catch(() => {
+					uni.hideLoading();
+				})
+			},
+
+			// 获取弹幕列表
+			getPrizeNews() {
+				$http.post('/api/v1/mp/user/ticket/hitPrizeBarrage', {}).then(res => {
+					const {
+						listOne,
+						listTwo
+					} = res && res.data
+					listOne.forEach(item => {
+						item.avatar = item.avatar ? env.filePublic + item.avatar : env.filePublic +
+							'70/EJ305PQR2IBE45O9AFAI'
+						item.prizeInfo = item.prizeInfo && (item.prizeInfo.length > 14) ? item.prizeInfo
+							.substring(0, 15) + '...' : item.prizeInfo
+					})
+
+					listTwo.forEach(item => {
+						item.avatar = item.avatar ? env.filePublic + item.avatar : env.filePublic +
+							'70/EJ305PQR2IBE45O9AFAI'
+						item.prizeInfo = item.prizeInfo && (item.prizeInfo.length > 14) ? item.prizeInfo
+							.substring(0, 15) + '...' : item.prizeInfo
+					})
+					this.prizeNewsListOne = listOne
+					this.prizeNewsListTwo = listTwo
+				})
+			},
+
+			// 获取当前盲票的详情
+			getTicketDetail(id) {
+				this.prizeList = []
+				$http.post('/api/v1/mp/user/mall/ticket/detail', {
+					boxId: id,
+					noToken: true
+				}).then(res => {
+					uni.hideLoading();
+					if (res.code == 0) {
+						this.ticketInfo = {
+							...res.data,
+							ticketAwardsLabelList: res.data.ticketAwardsLabelList.map(item => {
+								return {
+									...item,
+									picUrl: env.filePublic + item.picUrl
+								}
+							})
+						}
+						this.payInfo = this.ticketList[this.ticketIndex]
+					}
+				}).catch(() => {
+					uni.hideLoading();
+				})
+			},
+
+			// 立即开刮
+			payment() {
+				this.payInfo = this.ticketList[this.ticketIndex]
+				if (this.payInfo) {
+					let data = {
+						userCouponIds: [],
+						autoCoupon: 1,
+						boxId: this.payInfo.boxId,
+						orderNum: 1,
+						appSource: appId
+					}
+					$http.post('/api/v1/mp/user/ticket/order/settle', data).then(res => {
+						if (res.code == 0) {
+							let info = {
+								...res.data,
+								...this.payInfo,
+								picUrl: this.payInfo.picUrl[0],
+								couponTitle: res.data && res.data.couponList && res.data.couponList.length &&
+									res
+									.data.couponList[0].title,
+								couponId: res.data && res.data.couponList && res.data.couponList.length && res
+									.data
+									.couponList[0].id
+							}
+							this.payInfo = info
+							this.payShow = true
+						}
+					}).catch(() => {
+						uni.$u.toast('购买失败,请重试!');
+					})
+				} else {
+					uni.$u.toast('商品正在准备中');
+				}
+
+			},
+
+			// 关闭支付弹框
+			close() {
+				this.payShow = false
+			},
+
+			changeList() {
+				let data = {
+					type: 'online',
+					noToken: true
+				}
+				$http.post(`/api/v1/mp/user/mall/ticket/goods/list?pageNum=${this.pageNum}&pageSize=100`, data).then(
+					res => {
+						const boxIdStr = this.ticketList.map(item => item.boxId).join()
+						let boxIdStrNew = res && res.rows && res.rows.map(item => item.boxId).join()
+						if (boxIdStr != boxIdStrNew) {
+							this.currentIndex = 0
+							this.getList()
+						}
+					})
+			},
+
+			// 盲票向左箭头
+			ticketLeft() {
+				if ((this.ticketIndex >= 0) && (this.ticketIndex < (this.ticketList.length - 1))) {
+					this.ticketIndex++
+				} else if (this.ticketIndex == (this.ticketList.length - 1)) {
+					this.ticketIndex = 0
+				}
+				this.ticketTitleIndex = this.ticketIndex
+				this.getTicketDetail(this.ticketList[this.ticketTitleIndex].boxId)
+			},
+
+			// 盲票向右箭头
+			ticketRight() {
+				if (this.ticketIndex > 0) {
+					this.ticketIndex--
+				} else if (this.ticketIndex == 0) {
+					this.ticketIndex = this.ticketList.length - 1
+				}
+				this.ticketTitleIndex = this.ticketIndex
+				this.getTicketDetail(this.ticketList[this.ticketTitleIndex].boxId)
+			},
+
+			toRollingGame() {
+				uni.switchTab({
+					url: '/pages/core/index'
+				})
+			},
+
+			// 线上立即刮票成功,跳转到刮奖过程
+			toProcess(id) {
+				this.payShow = false
+				uni.navigateTo({
+					url: `/packagePrize/purchase/index?boxId=${ this.ticketInfo.boxId }&orderId=${ id }&isTry=0`
+				})
+			},
+
+			// 点击盲票,跳转关联商品详情
+			toTicketBox(item) {
+				if (item.refType && JSON.parse(item.refType).value === 'goods') {
+					uni.navigateTo({
+						url: `/packagePrize/goods/index?id=${ item.refId }&boxId=${ this.ticketInfo.boxId }`
+					})
+				} else if (item.refType && JSON.parse(item.refType).value === 'coin') {
+					uni.navigateTo({
+						url: `/packagePrize/goods/detail?id=424`
+					})
+				} else if (item.refType && JSON.parse(item.refType).value === 'coupon' || JSON.parse(item.refType)
+					.value === 'coupon_pkg') {
+					uni.navigateTo({
+						url: `/packagePrize/goods/detail?id=425`
+					})
+				}
+
+			},
+
+			// 点击奖品,跳转到奖品详情
+			toPrizeGoods(item) {
+				if (item.prizeType == "goods") {
+					uni.navigateTo({
+						url: `/packagePrize/goods/detail?id=${ item.refId }`
+					})
+				}
+				//门店优惠券
+				if (item.prizeType == "coupon") {
+					// if (item.couponType == "1") {
+					// 	uni.navigateTo({
+					// 		url: `/packagePrize/goods/detail?id=426`
+					// 	})
+					// }
+					// if (item.couponType == "2") {
+					// uni.navigateTo({
+					// 	url: `/packagePrize/goods/detail?id=425`
+					// })
+					// }
+					uni.navigateTo({
+						url: `/packagePrize/goods/detail?id=425`
+					})
+				}
+				// 盲豆
+				if (item.prizeType == "coin") {
+					uni.navigateTo({
+						url: `/packagePrize/goods/detail?id=424`
+					})
+				}
+			},
+
+			toActivity() {
+				uni.switchTab({
+					url: '/pages/activity/index'
+				})
+			},
+
+			// 点击所有盲票
+			toTicket() {
+				uni.navigateTo({
+					url: '/packageGoods/ticket/index'
+				})
+			},
+
+			// 点击仓库
+			toPrize() {
+				if (!this.loginState) {
+					uni.navigateTo({
+						url: "/pages/login/index"
+					})
+					return
+				}
+				uni.navigateTo({
+					url: '/packagePrize/prize/index'
+				})
+			},
+
+			// 点击规则说明
+			toRule() {
+				uni.navigateTo({
+					url: '/packageOther/rule/purchase'
+				})
+			},
+
+			getBaseInfo() {
+				$http.post('/api/v1/mp/user/getLoginUserinfo', {
+					appSource: appId
+				}).then(res => {
+					uni.hideLoading();
+					if (res.code == 0) {
+						this.userInfo = res.data
+					}
+				})
+			},
+		},
+		//分享好友
+		onShareAppMessage(res) {
+			return {
+				title: '盲票,玩的就是有趣',
+				path: '/pages/index/index'
+			}
+		},
+		//分享朋友圈
+		onShareTimeline() {
+			return {
+				title: '盲票,玩的就是有趣',
+				query: `userId=${ this.userInfo.userId?this.userInfo.userId:null }&type=1`
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.status_bar {
+		width: 100%;
+		height: var(--status-bar-height);
+	}
+
+	::v-deep .u-tabbar__placeholder {
+		display: none;
+	}
+</style>
+
+<style lang="scss" scoped>
+	.box {
+		position: relative;
+		width: 100%;
+		height: calc(100vh - 50px);
+		background: url(https://mp-public-test-1307117429.cos.ap-shanghai.myqcloud.com/v2/bkg1.png) center center no-repeat;
+		background-size: 100vw calc(100vh - 50px);
+
+		.index {
+			position: absolute;
+			width: 100%;
+		}
+	}
+
+	// 中奖信息
+	.barrage {
+		position: relative;
+		width: 518rpx;
+		height: 70rpx;
+
+		border-radius: 42rpx;
+		margin-bottom: 16rpx;
+		margin-left: 34rpx;
+
+		&-bg {
+			position: absolute;
+			width: 518rpx;
+			height: 70rpx;
+		}
+
+		&-swiper {
+			position: absolute;
+			z-index: 10;
+			width: 100%;
+			height: 100%;
+			border-radius: 42rpx;
+			overflow: hidden;
+
+			&-item {
+				width: 100%;
+				height: 100%;
+
+				&-content {
+					display: flex;
+					align-items: center;
+					width: 510rpx;
+					height: 70rpx;
+
+					image {
+						width: 58rpx;
+						height: 58rpx;
+						border-radius: 50%;
+						margin-right: 14rpx;
+						border: 1px solid #fff;
+						margin-left: 8rpx;
+					}
+
+					.title {
+						flex: 1;
+						font-size: 26rpx;
+						font-weight: 500;
+						color: #fff;
+					}
+				}
+			}
+		}
+
+		&-none {
+			position: absolute;
+			width: 518rpx;
+			height: 70rpx;
+			z-index: 20;
+		}
+	}
+
+	// 查看规则
+	.rule {
+		display: flex;
+		align-items: center;
+		justify-content: flex-end;
+		height: 34rpx;
+		padding-right: 34rpx; //
+		margin-bottom: 24rpx;
+
+		&-content {
+			image {
+				width: 34rpx; // 210rpx
+				height: 34rpx; // 50rpx
+				margin-right: 14rpx; //
+			}
+
+			text {
+				// position: absolute;
+				// right: 20rpx;
+				font-size: 40rpx;
+				font-family: 'YouSheBiaoTiHei';
+				font-weight: 400;
+				color: #FFFFFF;
+			}
+		}
+	}
+
+	// 盲票
+	.ticket {
+		height: 37vh;
+		position: relative;
+
+		&-bgc {
+			position: absolute;
+			top: 77%;
+			width: 100%;
+			text-align: center;
+
+			image {
+				margin: 0 auto;
+				height: 156rpx;
+				width: 570rpx;
+			}
+
+		}
+
+		&-swiper {
+			height: 100%;
+
+			&-item {
+				position: relative;
+				height: 100%;
+
+				&-box {
+					position: absolute;
+					// bottom: 100rpx;
+					bottom: 20%;
+					width: 380rpx;
+					height: 380rpx;
+					animation: movePrize 2s linear infinite;
+				}
+			}
+		}
+
+		&-left {
+			width: 100rpx;
+			height: 100rpx;
+			position: absolute;
+			top: 45%;
+			left: 0;
+			display: table-cell;
+			vertical-align: middle;
+
+			image {
+				display: block;
+				margin: 25rpx auto;
+				width: 45rpx;
+				height: 40rpx;
+			}
+		}
+
+		&-right {
+			width: 100rpx;
+			height: 100rpx;
+			position: absolute;
+			top: 45%;
+			right: 0;
+			display: table-cell;
+			vertical-align: middle;
+
+			image {
+				display: block;
+				margin: 25rpx auto;
+				width: 45rpx;
+				height: 40rpx;
+				transform: rotate(180deg);
+			}
+		}
+	}
+
+	// 投诉建议
+	.proposal {
+		position: relative;
+		height: 66rpx;
+		margin-bottom: 30rpx;
+
+		&-time {
+			position: absolute;
+			left: 30rpx;
+			bottom: 0;
+			flex-direction: column;
+			align-items: flex-start;
+
+			image {
+				width: 140rpx;
+				height: 78rpx;
+				margin-bottom: 12rpx;
+				animation: scaleTime 3s linear infinite;
+			}
+
+			.time {
+				animation: moveTime 0.5s linear infinite;
+
+				::v-deep .u-count-down__text {
+					line-height: 30rpx;
+					font-size: 30rpx;
+					font-family: YouSheBiaoTiHei;
+					font-weight: 400;
+					color: #FFFFFF;
+				}
+			}
+		}
+
+		&-progress {
+			position: absolute;
+			bottom: 0;
+			width: 140rpx;
+		}
+
+		&-tip {
+			display: flex;
+			align-items: center;
+			position: absolute;
+			right: 0;
+			bottom: 0;
+			width: 212rpx;
+			height: 66rpx;
+
+			image {
+				position: absolute;
+				right: 0;
+				bottom: 0;
+				width: 212rpx;
+				height: 66rpx;
+			}
+
+			text {
+				position: absolute;
+				right: 16rpx;
+				font-size: 40rpx;
+				font-family: YouSheBiaoTiHei;
+				font-weight: 400;
+				color: #FFFFFF;
+			}
+		}
+	}
+
+	// 中奖概率
+	.chance {
+		justify-content: flex-start;
+		height: 44rpx;
+		margin: 0 34rpx 26rpx;
+		background-color: rgba(000, 000, 000, .36);
+		border-radius: 22rpx;
+		color: #FFFFFF;
+		font-family: YouSheBiaoTiHei;
+		font-size: 14px;
+
+		&-title {
+			margin-left: 8rpx;
+		}
+
+		&-hitRate {
+			flex: 1;
+			justify-content: space-evenly;
+
+			&-content {
+
+				image {
+					width: 56rpx;
+					height: 50rpx;
+				}
+			}
+		}
+	}
+
+	// 盲票名称轮播
+	.ticket-title {
+		height: 66rpx;
+		padding: 0 34rpx;
+		margin: 30rpx 0;
+		overflow: hidden;
+		// margin: 0 34rpx;
+
+		&-swiper {
+			width: calc(100vw - 34px);
+			height: 100%;
+
+			&-item {
+				height: 100%;
+				transform: skew(20deg);
+				background: rgba(255, 169, 0, 0.16);
+
+				margin: 0 17rpx;
+				color: #fff;
+				font-size: 34rpx;
+
+				text {
+					// padding: 0 20rpx;
+					transform: skew(-20deg);
+				}
+			}
+
+			.action {
+				background: #FFAE00;
+				box-shadow: 0px 3px 3px 0px rgba(220, 145, 107, 0.57);
+			}
+		}
+	}
+
+	// 刮开盲票
+	.ticket-btn {
+		justify-content: space-between;
+		height: 20vh;
+		padding: 0 30rpx;
+
+		&-left {
+			flex-direction: column;
+
+			image {
+				width: 142rpx;
+				height: 142rpx;
+				margin-bottom: 16rpx;
+			}
+
+			&__title {
+				line-height: 30rpx;
+				font-size: 30rpx;
+				font-family: YouSheBiaoTiHei;
+				font-weight: 400;
+				color: #666;
+			}
+		}
+
+		&-center {
+			position: relative;
+			flex-direction: column;
+			height: 100%;
+
+			.image-wrap {
+				position: absolute;
+				width: 310rpx;
+				height: 90%;
+				border-radius: 50%;
+				overflow: hidden;
+				box-shadow: 2px 2px 10px rgba(255, 189, 24, .8), -2px -2px 10px rgba(255, 189, 24, .8), 2px -2px 10px rgba(255, 189, 24, .8), -2px 2px 10px rgba(255, 189, 24, .8);
+
+				.btn {
+					width: 310rpx;
+					height: 100%;
+				}
+
+				.shadow {
+					position: absolute;
+					width: 310rpx;
+					height: 130%;
+					left: 0;
+					animation: shadowMove 1.5s linear infinite;
+				}
+			}
+
+			&-wrap {
+				width: 300rpx;
+				position: absolute;
+				animation: scaleBtn 1.5s linear infinite;
+
+				&__title {
+					width: 300rpx;
+					text-align: center;
+					font-size: 84rpx;
+					font-family: YouSheBiaoTiHei;
+					font-weight: 400;
+					color: #FFFFFF;
+					line-height: 72rpx;
+					animation: shadowBtn 1.5s linear infinite;
+				}
+			}
+		}
+
+		&-right {
+			flex-direction: column;
+
+			image {
+				width: 142rpx;
+				height: 142rpx;
+				margin-bottom: 16rpx;
+			}
+
+			&__title {
+				line-height: 30rpx;
+				font-size: 30rpx;
+				font-family: YouSheBiaoTiHei;
+				font-weight: 400;
+				color: #666;
+			}
+		}
+	}
+
+	// 盲票价格
+	.ticket-price {
+		height: 44rpx;
+
+		&-checkbox {
+			width: 44rpx;
+			height: 44rpx;
+			background-color: #fff;
+			border-radius: 50%;
+			overflow: hidden;
+			margin-right: 20rpx;
+
+			image {
+				width: 44rpx;
+				height: 44rpx;
+			}
+		}
+
+		&-amt {
+			height: 44rpx;
+			font-family: YouSheBiaoTiHei;
+			font-weight: 400;
+			align-items: flex-end;
+			color: #FE9E48;
+			margin-right: 20rpx;
+
+			.num {
+				font-size: 56rpx;
+				line-height: 40rpx;
+			}
+
+			.txt {
+				line-height: 36rpx;
+				font-size: 40rpx;
+			}
+		}
+
+		&-discount {
+			height: 44rpx;
+			align-items: flex-end;
+
+			.num {
+				line-height: 26rpx;
+				font-size: 26rpx;
+				text-decoration: line-through;
+				font-style: italic;
+				color: #FFAE00;
+			}
+		}
+	}
+
+	// 奖品移动动画
+	@keyframes movePrize {
+		0% {
+			transform: translate(0, 10px)
+		}
+
+		25% {
+			transform: translate(0, 5px)
+		}
+
+		50% {
+			transform: translate(0, 0px)
+		}
+
+		75% {
+			transform: translate(0, 5px)
+		}
+
+		100% {
+			transform: translate(0, 10px)
+		}
+	}
+
+	// 倒计时移动动画
+	@keyframes moveTime {
+		0% {
+			transform: translate(2px, 0)
+		}
+
+		25% {
+			transform: translate(0, 0)
+		}
+
+		50% {
+			transform: translate(1px, 0)
+		}
+
+		75% {
+			transform: translate(0, 0)
+		}
+
+		100% {
+			transform: translate(2px, 0)
+		}
+	}
+
+	// 放大缩小动画
+	@keyframes scaleTime {
+		0% {
+			transform: scale(1.05)
+		}
+
+		25% {
+			transform: scale(1.02)
+		}
+
+		50% {
+			transform: scale(0.9)
+		}
+
+		75% {
+			transform: scale(1.02)
+		}
+
+		100% {
+			transform: scale(1.05)
+		}
+	}
+
+	// 刮开刮票呼吸动画
+	@keyframes scaleBtn {
+		0% {
+			transform: scale(1.04)
+		}
+
+		25% {
+			transform: scale(1.02)
+		}
+
+		50% {
+			transform: scale(1)
+		}
+
+		75% {
+			transform: scale(1.02)
+		}
+
+		100% {
+			transform: scale(1.04)
+		}
+	}
+
+	// 刮开刮票阴影动画
+	@keyframes shadowBtn {
+		0% {
+			text-shadow: 2px -2px 3px #fff;
+		}
+
+		25% {
+			text-shadow: none;
+		}
+
+		50% {
+			text-shadow: none;
+		}
+
+		75% {
+			text-shadow: none;
+		}
+
+		100% {
+			text-shadow: 2px -2px 3px #fff;
+		}
+	}
+
+	// 刮开盲票光影移动动画
+	@keyframes shadowMove {
+		0% {
+			left: -100%;
+		}
+
+		100% {
+			left: 110%;
+		}
+	}
 </style>

+ 4 - 4
src/pages/lucky/index.vue

@@ -9,9 +9,9 @@
 					</view>
 					<view class="luck-info-content flex">
 						<view class="luck-info-content-num">
-							<image src="../../static/lucky/lucky_gkmp.png" mode="scaleToFill"
+							<image src="../../static/lucky/lucky_gkmp.png" mode="aspectFit"
 								v-if="info.salePrice == 0"></image>
-							<image src="../../static/lucky/zi.png" mode="scaleToFill" v-else></image>
+							<image src="../../static/lucky/zioff.png" mode="aspectFit" v-else></image>
 						</view>
 						<view class="luck-info-content-img">
 							<view class="luck-info-content-img-word">
@@ -151,7 +151,7 @@
 							this.info = res.data
 							if (uni.getStorageSync('token')) {
 								uni.redirectTo({
-									url: `/packagePrize/choice/index?id=${ res.data.ticketId }&type=offLine`
+									url: `/packagePrize/choice/index?id=${ res.data.ticketId }&type=offline`
 								})
 							} else {
 								this.luckyShow = true
@@ -250,7 +250,7 @@
 			//跳转奖品页
 			toChoice() {
 				uni.redirectTo({
-					url: `/packagePrize/choice/index?id=${ this.ChoiceData }&type=offLine`
+					url: `/packagePrize/choice/index?id=${ this.ChoiceData }&type=offline`
 				})
 			},
 

+ 0 - 9
src/pages/ticketBox/detail.vue

@@ -250,14 +250,10 @@
 			},
 			
 			getDetail() {
-				uni.showLoading({
-					title: '加载中'
-				});
 				$http.post('/api/v1/mp/user/mall/ticket/detail/new', {
 					boxId: this.boxId,
 					noToken: true
 				}).then(res => {
-					uni.hideLoading();
 					if (res.code == 0) {
 						this.info = {
 							...res.data,
@@ -272,7 +268,6 @@
 						this.getPrizeList()
 					}
 				}).catch(() => {
-					uni.hideLoading();
 				})
 			},
 			getPrizeList() {
@@ -409,8 +404,6 @@
 		onShareTimeline() {
 			return {
 				title: '一起来刮盲票吧',
-				// query: { userId: this.userInfo.userId,
-				// 		type: 1, },
 				query: `boxId=${ this.info.boxId }&userId=${ this.userInfo.userId?this.userInfo.userId:null }&type=1`
 						
 			}
@@ -418,12 +411,10 @@
 		onReachBottom() {
 			if(this.total < this.pageNum * 10) return ;
 			this.status = 'loading';
-			// setTimeout(() => {
 			++this.pageNum
 			if(this.total < this.pageNum * 10) this.status = 'nomore';
 				else this.status = 'loading';
 			this.getPrizeList()
-			// }, 2000)
 		},
 	}
 </script>

BIN
src/static/index/barrage_bgTwo.png


BIN
src/static/index/index_anniu.png


BIN
src/static/index/index_beijing.png


BIN
src/static/index/index_duihuandating.png


BIN
src/static/index/index_tip_bgTwo.png


BIN
src/static/lucky/lucky_gkmptwo.png


BIN
src/static/lucky/zioff.png


BIN
src/static/public/promoter.png


Някои файлове не бяха показани, защото твърде много файлове са промени