glhcp/uniapp/bundle/pages/user_vip/user_vip.vue

254 lines
6.3 KiB
Vue
Raw Normal View History

2023-08-10 06:59:52 +00:00
<template>
<view>
<view class="user-vip">
<view class="header">
<view class="user-vip-info flex">
<u-image width="110rpx" height="110rpx" border-radius="50%" :src="userInfo.avatar"></u-image>
<view class="m-l-20">
<view class="user-text white xxl flex">{{userInfo.nickname}}</view>
<view class="flex">
<view class="user-level white xs flex row-center m-t-10">当前等级{{userInfo.level_name || "无"}}</view>
</view>
</view>
</view>
</view>
<view class="content m-t-50">
<view class="vip-swiper-container">
<swiper class="swiper" style="height: 360rpx" previous-margin="30rpx"
:current="currentIndex" @change="bindchange">
<swiper-item v-for="(item, index) in levelList" :key="index">
<view class="vip-card-item" :style="'background-image: url(' + item.background_image + ');'">
<view class="flex row-between">
<view class="flex grade white sm">
{{item.lock_desc}}
<!-- <view v-if="item.current_level_status == 1" class="flex grade white sm"></view>
<view v-else-if="item.current_level_status == -1" class="flex white sm ml20">未解锁</view>
<view v-else-if="item.current_level_status == 0" class="flex white sm ml20">已解锁</view> -->
</view>
<image class="grade-icon m-r-34" :src="item.image"></image>
</view>
<view class="flex row-between vip-name white">
<view class="bold">{{item.name}}</view>
<!-- <view class="sm">{{item.tips2}}</view> -->
</view>
<view class="flex row-center m-l-30 m-r-30" v-if="item.diff_growth_percent">
<view class="vip-progress bg-white flex">
<view class="vip-progress-bar" :style="'width: ' + (item.diff_growth_percent*100) + '%'"></view>
</view>
</view>
<view class="flex row-between m-t-30" style="padding: 0 30rpx">
<view class="sm white" style="line-height: 36rpx" v-if="item.current_level_status == 0">
{{item.tips1}}
</view>
<router-link to="/bundle/pages/user_growth/user_growth" class="flex" v-else>
<view class="sm white" style="line-height: 36rpx">
<!-- {{item.current_level_status == 0 ? '当前高于该等级' : item.current_growth_tips}} -->
{{item.tips1}} <u-icon name="arrow-right"></u-icon>
</view>
</router-link>
<view class="white">{{item.tips2}}</view>
</view>
</view>
</swiper-item>
</swiper>
</view>
<view class="vip-grade-rule">
<view class="title flex">
<view class="line br60"></view>
<view class="xl m-l-20 bold">说明</view>
</view>
<view class="p-t-20">
<text class="rule-content column lighter">
{{growthRule}}
</text>
</view>
</view>
<!-- <view class="vip-rights">
<view class="title flex">
<view class="line br60"></view>
<view class="xl ml20 bold">会员权益</view>
</view>
<view class="rights-list flex">
<view v-for="(item, index) in privilegeList" :key="index" class="rights-item column-center">
<image class="mb10" :src="item.image"></image>
<view class="sm">{{item.name}}</view>
</view>
</view>
</view> -->
</view>
</view>
<loading-view v-if="!userInfo.nickname"></loading-view>
</view>
</template>
<script>
import {
getLevelList
} from '@/api/user';
export default {
data() {
return {
userInfo: {},
currentIndex: 0,
levelList: [],
growthRule: "",
privilegeList: []
};
},
onLoad() {
this.getLevelListFun();
},
methods: {
bindchange(e) {
let {
current
} = e.detail;
let currentLevel = this.levelList[current];
this.currentIndex = current
},
getLevelListFun() {
getLevelList().then(res => {
const {
code,
data
} = res;
if (code != 1) return;
const {
user,
level_intro,
level
} = data;
let index = level.findIndex(item => item.current_level_status == 1);
if (index == -1) index = 0;
this.userInfo = user
this.growthRule = level_intro
this.levelList = level
this.currentIndex = index
});
},
}
};
</script>
<style lang="scss">
page {
background-color: #fff;
background-image: url(../../static/vip_grade_bg.png);
background-size: 100% auto;
background-repeat: no-repeat;
.user-vip {
.header {
padding-top: 40rpx;
.user-vip-info {
padding-left: 30rpx;
.user-level {
border: 1px solid white;
border-radius: 100rpx;
padding: 4rpx 20rpx;
line-height: 30rpx;
}
.user-text {
line-height: 50rpx;
font-weight: bold;
}
}
}
.content {
.vip-card-item {
height: 360rpx;
width: 690rpx;
position: relative;
background-size: 100% 100%;
.grade {
line-height: 36rpx;
background-color: rgba(0, 0, 0, 0.5);
border-top-right-radius: 100rpx;
border-bottom-right-radius: 100rpx;
height: 50rpx;
padding: 0 28rpx;
}
.user-grade {
line-height: 36rpx;
margin-left: 30rpx;
}
.grade-icon {
width: 160rpx;
height: 145rpx;
}
.vip-name {
padding: 10rpx 30rpx;
font-size: 46rpx;
text-align: center;
align-items: flex-end;
margin-bottom: 30rpx;
margin-top: -20rpx;
}
.vip-progress {
height: 8rpx;
border-radius: 8rpx;
width: 100%;
overflow: hidden;
.vip-progress-bar {
background-color: #f8d07c;
height: 100%;
}
}
}
.vip-grade-rule {
margin: 24rpx 40rpx;
.title {
.line {
width: 8rpx;
height: 34rpx;
background-color: #f79c0c;
}
}
}
.vip-rights {
margin: 24rpx 40rpx;
.title {
padding: 28rpx 0;
.line {
width: 8rpx;
height: 34rpx;
background-color: #f79c0c;
}
}
.rights-item {
width: 25%;
padding-bottom: 30rpx;
image {
width: 82rpx;
height: 82rpx;
}
}
}
}
}
}
</style>