Files
sykl-sm/pages/member/rights.vue

417 lines
15 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="content">
<view class="tab">
<view class="tab-item" :class="{active : tabType == 'season'}" @click="typeClick('season')">
季卡会员
</view>
<view class="tab-item" :class="{active : tabType == 'year'}" @click="typeClick('year')">
年卡会员
</view>
</view>
<view class="rights">
<view class="card">
<image class="cardBack" :src="tabType == 'season' ? '/static/imgs/memberBack_01.png':'/static/imgs/memberBack_02.png'" mode="widthFix"></image>
<view class="cardText">
<view class="card-title">
<image src="@/static/icons/memberOpen_icon.png"></image>{{identities.name}}
</view>
<!-- <view class="tips">
{{rights.length}}大会员权益赠送{{tabType == 'season' ? '5000' : '2000'}}水滴
</view> -->
<view class="price-left" v-if="identities.is_open">
<view class="price-serial">
{{identities.times.serial}}
</view>
<view class="price-time">
到期时间 {{identities.times.ended_at}}
</view>
</view>
<view class="price-left" v-else>
<view class="price-top">
开通{{tabType == 'season' ? '季卡' : '年卡'}}会员金额
</view>
<view class="price-number">
{{identities.price}}<image src="@/static/icons/memberOpen_img.png"></image>
</view>
</view>
<!-- <view class="price-right">
限购{{tabType == 'season'?'20000' : '10000'}}
</view> -->
</view>
</view>
<scroll-view scroll-x class="list" scroll-with-animation>
<view class="list-item" v-for="(item, index) in rules" :key="index">
<view class="list-img">
<image :src="item.cover" mode=""></image>
</view>
<view class="list-rights">
<text v-if="tabType == 'season'">{{item.name == 'recommend_coupon' ? '' : '+'}}</text>
<text v-else>{{item.name == 'open_nk' ? '' : '+'}}</text>
{{item.value}}
</view>
<view class="list-name">
{{item.text}}
</view>
<view class="list-tips" :class="{active : tabType == 'season'}" v-if="tabType == 'season'">
<text>{{item.name == 'recommend_coupon' ? '券' : '水滴'}}</text>
</view>
<view class="list-tips" :class="{active : tabType == 'season'}" v-else>
<text v-if="item.name == 'open_nk'"></text>
<text v-else-if="item.name == 'open_get_goods'"></text>
<text v-else>水滴</text>
</view>
</view>
</scroll-view>
<view class="suggest">
<view class="suggest-cont">
<view class="suggest-title">
{{tabType == 'season'?'季卡' : '年卡'}}权益说明
</view>
<view class="suggest-item">
<view class="suggest-label" v-for="(item, index) in rights" :key="index">
<text>{{index + 1}}</text>
<view class="suggest-text">
{{item.remark}}
</view>
</view>
</view>
</view>
</view>
</view>
<view class="emption">
<view class="emption-cont">
<view class="emption-price">
<view class="emption-top">{{identities.price}}</view>
<view class="emption-tips" v-if="couponPrice > 0">(抵值券{{couponPrice}})</view>
<view class="emption-tips" v-else>({{tabType == 'season'?'季卡会员' : '年卡会员'}})</view>
</view>
<view class="emption-btn" v-if="can.open" @click="$Router.push({name: 'memberOpen', params:{identity_id: newId}})">
立即开通
</view>
<block v-else>
<view class="emption-btn" v-if="can.renew" @click="$Router.push({name: 'memberOpen', params:{identity_id: newId}})">
立即续费
</view>
<view class="emption-btn active" v-else>
{{buttonText}}
</view>
</block>
</view>
</view>
</view>
</template>
<script>
import { identitySee } from '@/apis/interfaces/member'
export default {
data() {
return {
buttonText: '',
couponPrice: '', //抵值券
tabType: 'season', //会员标签
rights : [], //权益
rules : [],
newId: '',
identities: '',
identityId: '',
can: ''
}
},
onShow() {
// 获取身份前置
this.identityInfo();
},
methods: {
// 身份前置
identityInfo(){
// 3为季卡,4为年卡
let identityId = ''
if(this.tabType == 'season') {
identityId = 3
} else {
identityId = 4
}
identitySee(identityId).then(res => {
this.identities = res
this.rules = res.rules
this.couponPrice = res.coupon_price
this.rights = res.rights
this.newId = res.identity_id
this.can = res.can
this.buttonText = res.buttonText
}).catch(err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
// 切换身份
typeClick(e) {
this.tabType = e
// 获取身份前置
this.identityInfo();
}
}
}
</script>
<style lang="scss" scoped>
.content {
background-image: linear-gradient(to bottom, #383041, #1a1528);
min-height: 100vh;
}
.tab {
position: fixed;
width: 100%;
left: 0;
top: 0;
z-index: 100;
height: 100rpx;
line-height: 100rpx;
background-color: #383041;
display: flex;
.tab-item {
text-align: center;
flex: 2;
color: #c3c1c5;
font-size: $title-size + 2;
position: relative;
font-weight: 600;
&::after {
position: absolute;
content: '';
left: calc(50% - 40rpx);
bottom: 0;
background-color: transparent;
width: 80rpx;
height: 6rpx;
border-radius: 50rpx;
}
&.active {
color: #ffffff;
}
&.active::after {
background-color: #ffffff;
}
}
}
.rights {
position: absolute;
width: 100%;
top: 120rpx;
background-image: linear-gradient(to bottom, #383041, #1a1528);
border-bottom: 160rpx solid transparent;
.card {
position: relative;
height: 380rpx;
.cardBack {
position: absolute;
width: 100%;
left: 0;
top: 0;
}
.cardText {
position: absolute;
width: 100%;
left: 0;
top: 0;
z-index: 3;
padding: $padding + 20 $padding + 30;
box-sizing: border-box;
.card-title {
font-weight: 600;
font-size: $title-size + 12;
color: #4c2616;
display: flex;
image {
width: 46rpx;
height: 46rpx;
margin: 6rpx 10rpx 0 0;
}
}
.tips {
color: #653925;
margin: 10rpx 0 30rpx;
font-size: $title-size-lg;
}
.price-left {
color: #653925;
display: flex;
margin-top: 140rpx;
.price-top {
flex: 1;
line-height: 64rpx;
}
.price-number {
font-weight: 600;
font-size: $title-size + 14;
display: flex;
image {
width: 32rpx;
height: 32rpx;
margin: 16rpx 0 0 10rpx;
}
}
.price-serial {
font-weight: 600;
font-size: $title-size + 4;
flex: 1;
line-height: 64rpx;
}
.price-time {
line-height: 60rpx;
font-size: $title-size-sm;
}
}
}
}
.list {
display: flex;
padding: $padding 20rpx;
box-sizing: border-box;
white-space: nowrap;
flex-direction: row;
align-items: center;
justify-content: space-around;
.list-item {
width: 25%;
display: inline-block;
position: relative;
text-align: center;
.list-tips {
position: absolute;
top: 0;
left: 60%;
font-size: $title-size-sm - 2;
background: #f1bd6e;
color: #681e0f;
border-radius: 30rpx;
padding: 0 10rpx;
line-height: 30rpx;
height: 30rpx;
&.active {
background: #f2c2a3;
}
}
.list-img {
width: 100rpx;
height: 100rpx;
margin: 0 auto;
background-color: rgba(255,255,255,.1);
border-radius: 50%;
padding: $padding - 10;
box-sizing: border-box;
image {
width: 100%;
height: 100%;
}
}
.list-rights {
color: #ffffff;
margin: 20rpx 0 10rpx;
}
.list-name {
color: #8d8a93;
font-size: $title-size-sm;
}
}
}
.suggest {
padding: 20rpx $padding + 10;
box-sizing: border-box;
.suggest-cont {
border: 2rpx solid #d2bfa9;
border-radius: $radius + 10;
padding: $padding $padding + 10;
box-sizing: border-box;
.suggest-title {
color: #e8bb9f;
font-size: $title-size + 4;
margin-bottom: 30rpx;
}
.suggest-item {
color: #b3a3a3;
font-size: $title-size-lg;
.suggest-label{
display: flex;
margin-bottom: 30rpx;
&:last-child {
margin-bottom: 0;
}
text {
width: 38rpx;
height: 38rpx;
border-radius: 50%;
border: 2rpx solid #b3a3a3;
text-align: center;
font-size: $title-size-sm;
display: inline-block;
margin-top: 5rpx;
}
.suggest-text {
width: calc(100% - 50rpx);
padding-left: 20rpx;
line-height: 40rpx;
box-sizing: border-box;
text-align: justify;
}
}
}
}
}
}
.emption {
position: fixed;
background-color: #251f31;
bottom: 0;
left: 0;
padding: $padding;
box-sizing: border-box;
width: 100%;
height: 160rpx;
z-index: 99;
.emption-cont {
border: 2rpx solid #e9c1a4;
border-radius: 50rpx;
line-height: 100rpx;
height: 100rpx;
color: #fbe8d2;
display: flex;
padding: 0 $padding - 15;
box-sizing: border-box;
.emption-price {
flex: 1;
display: flex;
.emption-top {
font-weight: 600;
font-size: $title-size + 10;
padding-right: 10rpx;
}
.emption-tips {
font-size: $title-size-m;
}
}
.emption-btn {
background-image: linear-gradient(to right, #f5c17d , #fbe9d6);
color: #681e0f;
height: 74rpx;
line-height: 74rpx;
padding: 0 30rpx;
border-radius: 50rpx;
font-weight: 600;
font-size: $title-size-lg;
margin-top: 13rpx;
&.active {
background-image: linear-gradient(to right, #bbbbbb, #9e9e9e);
color: #000;
}
}
}
}
</style>