| <template> | |
| 	<view class="container"> | |
|     <view class="header"> | |
|       <view class="header-bg"> | |
|         <image | |
|           src="/static/member-background.png" | |
|           class="header-img" | |
|           mode="scaleToFill" | |
|         /> | |
|         <!-- #ifndef H5 --> | |
|           <text class="header-title">会员开通</text> | |
|           <!-- 加一个推出箭头 --> | |
|           <view class="header-icon"  @click="goBack">     | |
|             <uv-icon name="arrow-left" color="#000" size="20" /> | |
|           </view> | |
|         <!-- #endif --> | |
| 				<!-- 轮播容器 --> | |
| 				<view class="uv-demo-block swiper-container"> | |
| 					<uv-swiper  | |
| 					bgColor="transparent" | |
| 						:list="list"  | |
|             :loading="!list.length" | |
|             @change="changeSwiper" | |
|             keyName="img" | |
| 						previousMargin="70"  | |
| 						nextMargin="70"  | |
| 						acceleration | |
| 						height="75" | |
| 						circular  | |
| 						:autoplay="false"  | |
| 						radius="5"  | |
| 						> | |
| 					</uv-swiper> | |
| 					<button class="swiper-btn"> | |
| 						已选择 | |
| 					</button> | |
| 					<image | |
| 					class="swiper-arrow" | |
| 						src="/static/decorative-arrow.png" | |
| 						mode="aspectFill" | |
| 					/> | |
| 				</view> | |
|       </view> | |
|     </view> | |
|      | |
|     <!-- 会员套餐选择容器 --> | |
|     <view class="membership-container"> | |
|       <!-- 套餐选择 --> | |
|       <view class="package-list"> | |
|         <view  | |
|           class="package-item"  | |
|           :class="{ 'active': selectedPackage === index }" | |
|           v-for="(item, index) in packageList"  | |
|           :key="index" | |
|           @click="selectPackage(index)" | |
|         > | |
| 					<view class="info"> | |
| 						<!-- 赠送标识 --> | |
| 						  <view class="gift-tag" v-if="item.content"> | |
| 							{{ item.content }} | |
| 							</view> | |
| 							 | |
| 							<view class="package-title">{{ item.title }}</view> | |
| 							 | |
| 							<view class="package-price">¥{{ getInt(item.discountedprice) }}.<text class="package-decimal">{{ getDecimal(item.discountedprice) }}</text></view> | |
| 							<view class="package-original">¥{{ item.originalprice }}</view> | |
| 					</view> | |
|            | |
|           <view class="package-btn" :class="{ 'active': selectedPackage === index }">  | |
|             {{ selectedPackage === index ? '已选择' : '点击选择' }} | |
|           </view> | |
|         </view> | |
|       </view> | |
|        | |
|       <!-- 优惠券选择 --> | |
|       <view class="coupon-section"> | |
|         <view class="coupon-title">选择优惠券</view> | |
|         <view class="coupon-selector" @click="selectCoupon"> | |
|           <view v-if="!selectedCoupon" class="coupon-placeholder"> | |
|             <text class="coupon-text">请选择</text> | |
|             <uv-icon name="arrow-right" color="#999" size="16" /> | |
|           </view> | |
|           <view v-else class="coupon-selected"> | |
|             <view class="coupon-info"> | |
|               <text class="coupon-name">{{ selectedCoupon.name }}</text> | |
|               <text class="coupon-amount">-¥{{ selectedCoupon.money }}</text> | |
|             </view> | |
|             <uv-icon name="arrow-right" color="#999" size="16" /> | |
|           </view> | |
|         </view> | |
|       </view> | |
|     </view> | |
|  | |
|     <!-- 立即开通会员按钮 --> | |
|     <view class="member-button-section"> | |
|       <uv-button  | |
|         type="primary"  | |
|         text="立即开通会员"  | |
|         :custom-style="{ | |
|           width: '100%', | |
|           height: '82rpx', | |
|           borderRadius: '44rpx', | |
|           backgroundColor: '#06DADC', | |
|           fontSize: '36rpx', | |
|           fontWeight: '500', | |
|           border: '1px solid #06DADC' | |
|         }" | |
|         @click="handleRecharge" | |
|       ></uv-button> | |
|     </view> | |
|  | |
|     <!-- 会员权益 --> | |
|     <view class="benefits-section"> | |
|       <view class="benefits-title">会员权益</view> | |
|        | |
|       <view class="benefits-list"> | |
|         <!-- 碎片学习 系统掌握 --> | |
|         <view class="benefit-item" v-for="item in packageList" :key="item.id"> | |
|           <uv-parse :content="item.content" /> | |
|         </view> | |
|          | |
|          <!-- 匹配水平 --> | |
|          <!-- <view class="benefit-item"> | |
|           <view class="benefit-content"> | |
|             <view class="benefit-title">匹配水平</view> | |
|             <view class="benefit-desc">依据水平精准推课,不做无用功快速提升</view> | |
|           </view> | |
|           <view class="benefit-icon"> | |
|             <image src="/static/member-image-2.png" mode="aspectFit"></image> | |
|           </view> | |
|         </view> | |
|          | |
|          科学闭环测 讲练结合 | |
|         <view class="benefit-item"> | |
|           <view class="benefit-content"> | |
|             <view class="benefit-title">科学闭环测 讲练结合</view> | |
|             <view class="benefit-desc">精心设计科学的学习流程 「测试-讲解-练习-检验」知识掌握更牢固</view> | |
|           </view> | |
|           <view class="benefit-icon"> | |
|             <image src="/static/member-image-3.png" mode="aspectFit"></image> | |
|           </view> | |
|         </view> --> | |
|       </view> | |
|     </view> | |
| 		 | |
| 	</view> | |
| </template> | |
| 
 | |
| 
 | |
| <script> | |
| 	export default { | |
| 		data() { | |
| 			return { | |
| 				list: [ | |
| 
 | |
| 				], | |
| 				selectedPackage: 0, // 默认选择第一个套餐 | |
| 				selectedMember: 0, // 默认选择第一个会员 | |
| 				defaultPackageList: [ | |
| 
 | |
| 				], | |
|         couponId: '', | |
|         selectedCoupon: null // 选中的优惠券信息 | |
| 			} | |
| 		}, | |
|     computed:{ | |
|       packageList(){ | |
|         return this.list[this.selectedMember].setmeals.length ? this.list[this.selectedMember].setmeals : this.defaultPackageList | |
|       } | |
|     }, | |
|      | |
|      | |
| 		methods: { | |
|       handleCouponSelected(coupon) { | |
|          | |
|         // 处理选中的优惠券 | |
|         this.selectedCoupon = coupon | |
|         this.couponId = coupon.id | |
|          | |
|         uni.showToast({ | |
|           title: `已选择优惠券:¥${coupon.money}`, | |
|           icon: 'success' | |
|         }) | |
|       }, | |
|       async handleRecharge(){ | |
|         // console.log('选中的会员id是:', this.packageList[this.selectedPackage]); | |
|  | |
|         const object = { | |
| 			// #ifdef H5 | |
| 			type : 'official', | |
| 			// #endif | |
|           memberId: this.list[this.selectedMember].id, | |
|           setmealId: this.packageList[this.selectedPackage].id | |
|         } | |
|         if (this.couponId) { | |
|           object.couponId = this.couponId | |
|         } | |
|         const res = await this.$api.member.openMember({...object}) | |
|         if (res.code === 200){ | |
|           if (res.result === 0){ | |
|             // 零元购 | |
|             uni.showToast({ | |
|               title: '充值成功', | |
|               icon: 'success' | |
|             }) | |
|             this.goBack() | |
|           }else { | |
|             // 调起微信支付 | |
|             this.$utils.wxPay(res.result, (res) => { | |
|               setTimeout(() => { | |
|                 this.goBack() | |
|               }, 1000) | |
|             }) | |
|           } | |
|         } | |
|       }, | |
|       goBack(){ | |
|         uni.navigateBack() | |
|       }, | |
| 			// 截取价格的整数与小数部分 | |
| 			getInt(pri){ | |
|         const price = String(pri) | |
| 				if (price.indexOf('.') === -1) { | |
| 					return price | |
| 				} | |
| 				if (price === null) { | |
| 					return '0' | |
| 				} | |
| 				return String(price).split('.')[0] | |
| 			}, | |
| 			getDecimal(pri){ | |
|         const price = String(pri) | |
| 				if (price === null) return '00' | |
| 				const parts = price.split('.') | |
| 				return parts[1] ? parts[1].padEnd(2, '0') : '00'   | |
| 			}, | |
| 			selectPackage(index) { | |
| 				this.selectedPackage = index | |
| 			}, | |
| 			selectCoupon() { | |
| 				uni.navigateTo({ | |
| 					url: '/subPages/user/discount?from=recharge' | |
| 				}) | |
| 			}, | |
|       async getMemberList(){ | |
|         const memberRes = await this.$api.member.getMemberList() | |
|         if (memberRes.code === 200){  | |
|           this.list = memberRes.result | |
|         }  | |
|       }, | |
|       changeSwiper(e){ | |
|         this.selectedMember = e.current | |
|         this.selectedPackage = 0 | |
|       } | |
| 		}, | |
|     onShow(){  | |
|       // 监听优惠券选择事件 | |
|       uni.$on('couponSelected', this.handleCouponSelected) | |
|       this.getMemberList() | |
|     }, | |
|     onUnload() { | |
|       // 移除事件监听 | |
|       uni.$off('couponSelected', this.handleCouponSelected) | |
|       console.log('接触监听'); | |
|        | |
|     }, | |
| 	} | |
| </script> | |
| 
 | |
| <style lang="scss" scoped> | |
| .container { | |
|   min-height: 100%; | |
| } | |
| 
 | |
| .header{ | |
|   width: 100%; | |
|   .header-bg{ | |
|     position: relative; | |
|     width: 100%; | |
|     height: 500rpx; | |
|     /* #ifdef H5 */ | |
|     margin-top: -100rpx; | |
|     /* #endif */ | |
|     // background: red; | |
|     .header-img{ | |
|       width: 100%; | |
|       height: 500rpx; | |
|     } | |
|     .header-title{ | |
|       font-size: 32rpx; | |
|       color: black; | |
|       position: absolute; | |
|       top: 100rpx; | |
|       font-weight: 500; | |
|       left: 50%; | |
|       transform: translateX(-50%); | |
|     } | |
| 		.header-icon{ | |
| 			position: absolute; | |
| 			top: 100rpx; | |
| 			left: 30rpx; | |
| 		} | |
| 		.swiper-container{ | |
| 			margin-top: -300rpx; | |
| 			.swiper-arrow{ | |
| 				width: 100%; | |
| 				height: 22rpx; | |
| 			} | |
| 			.swiper-btn{ | |
| 				margin: 35rpx auto 15rpx; | |
| 				width: 150rpx; | |
| 				height: 52rpx; | |
| 				border-radius: 999px; | |
| 				background: #06DADC; | |
| 				color: white; | |
| 				font-size: 28rpx; | |
| 				font-weight: 500; | |
| 				text-align: center; | |
| 				line-height: 52rpx; | |
| 			} | |
| 		} | |
|   } | |
| 
 | |
| 
 | |
| } | |
| 
 | |
| /* 立即开通会员按钮样式 */ | |
| .member-button-section { | |
|   margin:  0  50rpx 40rpx; | |
| } | |
| 
 | |
| // 会员套餐选择容器 | |
| .membership-container { | |
|   background: linear-gradient(180deg, #DEFFFF 0%, #FBFEFF 22.65%, #FFFFFF 100%); | |
|   padding: 40rpx 30rpx; | |
|   margin-top: 20rpx; | |
|    | |
|   .package-list { | |
|     display: flex; | |
|     justify-content: space-between; | |
|     gap: 16rpx; | |
|     margin-bottom: 20rpx; | |
|      | |
|     .package-item { | |
|       position: relative; | |
|       flex: 1; | |
|       background: #fff; | |
|       border-radius: 20rpx; | |
|        | |
|       text-align: center; | |
|       border: 2rpx solid #EEEEEE; | |
|       transition: all 0.3s; | |
|       // width: 119; | |
| 			height: 210rpx; | |
| 			// width: 238rpx; | |
| 			.info{ | |
| 				padding: 16rpx 16rpx 0 16rpx ; | |
| 			} | |
|       &.active { | |
|         border-color: $primary-color; | |
|         // box-shadow: 0 4rpx 20rpx rgba(34, 242, 235, 0.2); | |
|       } | |
|        | |
|       .gift-tag { | |
|         position: absolute; | |
|         top: -10rpx; | |
|         left: 0%; | |
|         // transform: translateX(-50%); | |
|         background: #FF6B6B; | |
|         color: #fff; | |
|         font-size: 20rpx; | |
|         padding: 8rpx 16rpx; | |
|         border-radius: 20rpx 20rpx 20rpx 0; | |
|         white-space: nowrap; | |
|       } | |
|        | |
|       .package-title { | |
|         font-size: 28rpx; | |
|         color: #000; | |
|         margin-bottom: 16rpx; | |
|         font-weight: 500; | |
|       } | |
|        | |
|       .package-price { | |
|         font-size: 36rpx; | |
|         color: #FF4800; | |
|         font-weight: 500; | |
|         margin-bottom: 8rpx; | |
| 				.package-decimal{ | |
| 					font-size: 24rpx; | |
| 				} | |
|       } | |
|        | |
|       .package-original { | |
|         font-size: 24rpx; | |
|         color: #8B8B8B; | |
| 				line-height: 1.4; | |
|         text-decoration: line-through; | |
|         margin-bottom: 8rpx; | |
|       } | |
|        | |
|       .package-btn { | |
|         background: #E4E7EB; | |
|         color: #191919; | |
|         font-size: 28rpx; | |
|         // padding: 12rpx 20rpx; | |
| 				width: 100%; | |
|         // border-radius: 30rpx; | |
|         transition: all 0.3s; | |
|         height: 52rpx; | |
| 				line-height: 52rpx; | |
| 				border-radius: 0 0 24rpx 24rpx; | |
|         &.active { | |
|           background: $primary-color; | |
|           color: #fff; | |
|         } | |
|       } | |
|     } | |
|   } | |
|    | |
|   .coupon-section { | |
|     .coupon-title { | |
|       font-size: 26rpx; | |
|       color: #181818; | |
|       margin-bottom: 10rpx; | |
|       // font-weight: 500; | |
|     } | |
|      | |
|     .coupon-selector { | |
|       background: #fff; | |
|       border-radius: 16rpx; | |
|       padding: 10rpx 0; | |
|       display: flex; | |
|       justify-content: space-between; | |
|       align-items: center; | |
|       border-bottom: 2rpx solid #f0f0f0; | |
|        | |
|       .coupon-placeholder { | |
|         display: flex; | |
|         justify-content: space-between; | |
|         align-items: center; | |
|         width: 100%; | |
|          | |
|         .coupon-text { | |
|           font-size: 32rpx; | |
|           color: #C6C6C6; | |
|         } | |
|       } | |
|        | |
|       .coupon-selected { | |
|         display: flex; | |
|         justify-content: space-between; | |
|         align-items: center; | |
|         width: 100%; | |
|          | |
|         .coupon-info { | |
|           display: flex; | |
|           // flex-direction: column; | |
|           align-items: center; | |
|           justify-content: space-between; | |
|           .coupon-name { | |
|             font-size: 28rpx; | |
|             color: #181818; | |
|             margin-bottom: 4rpx; | |
|           } | |
|            | |
|           .coupon-amount { | |
|             font-size: 28rpx; | |
|             color: red; | |
|             font-weight: 500; | |
|           } | |
|         } | |
|       } | |
|     } | |
|   } | |
| } | |
| 
 | |
| /* 会员权益样式 */ | |
| .benefits-section { | |
|   margin-top: 40rpx; | |
|   padding: 0 30rpx; | |
| } | |
| 
 | |
| .benefits-title { | |
|   font-size: 36rpx; | |
|   font-weight: bold; | |
|   color: #191919; | |
|   margin-bottom: 32rpx; | |
| } | |
| 
 | |
| .benefits-list { | |
|   display: flex; | |
|   flex-direction: column; | |
|   gap: 32rpx; | |
| } | |
| 
 | |
| .benefit-item { | |
|   background: #F8F8F8; | |
|   border: 1px solid #FFFFFF; | |
|   border-radius: 48rpx; | |
|   padding: 27rpx 40rpx; | |
|   display: flex; | |
|   align-items: center; | |
|   justify-content: space-between; | |
| } | |
| 
 | |
| .benefit-content { | |
|   flex: 1; | |
|   margin-right: 40rpx; | |
| } | |
| 
 | |
| .benefit-title { | |
|   font-size: 32rpx; | |
|   font-weight: 600; | |
|   color: #333; | |
|   margin-bottom: 16rpx; | |
| } | |
| 
 | |
| .benefit-desc { | |
|   font-size: 24rpx; | |
|   color: #09B1B3; | |
|   line-height: 36rpx; | |
| } | |
| 
 | |
| .benefit-icon { | |
|   width: 152rpx; | |
|   height: 152rpx; | |
|   // flex-shrink: 0; | |
| } | |
| 
 | |
| .benefit-icon image { | |
|   width: 100%; | |
|   height: 100%; | |
| } | |
| </style> |