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