<template> <view class="flex fld-c p15"> <u-sticky> <view class="flex ai-c"> <view v-for="(item, index) in vipAllList" :key="index" class="km-item" :class="{ actived: index == current }" @click="current = index"> {{ getKmTitle(item.subjects) }} </view> </view> </u-sticky> <view class="mt15"> <swiper class="swiper" :current="current" style="height: 120px;" :autoplay="false" :display-multiple-items="1.45" :disable-programmatic-animation="true" @change="onChange"> <swiper-item v-for="(item, index) in vipAllList" :key="index"> <view class="relative"> <image src="../../static/image/mine/vip_card.png" mode="widthFix" style="width:95%;"></image> <view class="vip-info"> <u-avatar class="br-p50 overflow-h" style="border: 3px solid #873E1D;" :size="35" mp-avatar></u-avatar> <view class="ml10"> <view class="fs16 fwb" style="color: #7E4012;line-height: 16px;"> {{ item.memberName }} </view> <view class="mt5 fs12" style="color: #7E4012;line-height: 12px;"> {{ getExpireText(item) }} </view> </view> </view> <view v-if="vipHasOpened(item)" class="corner"> VIP已开通 </view> <view v-if="vipHasOpened(item)" class="renew"> {{ item.price }}元立即续费 </view> <view v-else class="buy"> 立即充值 </view> </view> </swiper-item> <swiper-item> </swiper-item> </swiper> </view> <view class="mt20"> <swiper class="swiper" :current="current" style="height: 300px;" :autoplay="false" :disable-programmatic-animation="true" @change="onChange"> <swiper-item v-for="(item, index) in vipAllList" :key="index"> <view v-if="index == 0 || index == 3" class="p15 br8 cor-fff"> <view class="fs18 cor-000 fwb"> 3步轻松学{{ getKmTitle(item.subjects) }} </view> <view class="mt25 flex ai-c jc-sb"> <view class="flex ai-c"> <image src="../../static/image/mine/1.png" mode="widthFix" style="width:25px;"></image> <view class="ml7"> <view class="fs16 cor-000 fwb" style="line-height: 16px;"> 精简500题 </view> <view class="mt7 fs12 cor-666" style="line-height: 12px;"> 题目全部做对,视为完成 </view> </view> </view> <view class="study" @tap="to500(item)"> 去学习 </view> </view> <view class="mt45 flex ai-c jc-sb"> <view class="flex ai-c"> <image src="../../static/image/mine/2.png" mode="widthFix" style="width:25px;"></image> <view class="ml7"> <view class="fs16 cor-000 fwb" style="line-height: 16px;"> 真实考场模拟 </view> <view class="mt7 fs12 cor-666" style="line-height: 12px;"> 10次95分以上,视为完成 </view> </view> </view> <view class="study" @tap="toRealExam(item)"> 去学习 </view> </view> <view class="mt45 flex ai-c jc-sb"> <view class="flex ai-c"> <image src="../../static/image/mine/3.png" mode="widthFix" style="width:25px;"></image> <view class="ml7"> <view class="fs16 cor-000 fwb" style="line-height: 16px;"> 考前密卷 </view> <view class="mt7 fs12 cor-666" style="line-height: 12px;"> 2套试卷95分以上,视为完成 </view> </view> </view> <view class="study" @tap="toSpecExam(item)"> 去学习 </view> </view> </view> <view v-else style="margin-top: 30rpx;"> <view class="video-box"> <view class="flex jc-sb ai-c wp100"> <text style="color: #873E1D;font-size: 36rpx;">考场实况</text> <text class="cor-666 fs12">全部 ></text> </view> <view class="flex ai-c mt20"> <image src="../../static/image/index/index_bg.png" mode="widthFix" style="flex: 1;border-radius: 33rpx;"></image> <view class="ml18 text-center"> <u-button :customStyle="{ width: '200rpx', height: '66rpx', borderRadius: '33rpx' }" iconColor="#fff" text="去看视频" color="linear-gradient(90deg, #E66501 0%, #F8A42C 100%)" icon="play-circle" @click="toPlaceLive(item)"> </u-button> <view class="cor-333 fs15 mt17">真实考场模拟</view> </view> </view> </view> </view> </swiper-item> </swiper> </view> </view> </template> <script> import useUserStore from '@/jtools/store/user' export default { computed: { vipAllList() { return useUserStore().vipAllList.filter(it => [1, 2, 3, 4].includes(Number(it.subjects))) }, vipOnList() { return useUserStore().vipOnList }, }, data() { return { current: 0 } }, methods: { onChange(e) { this.current = e.detail.current }, getKmTitle(km) { return { '1': '科一', '2': '科二', '3': '科三', '4': '科四', }[km] }, getExpireText(item) { const vipOn = this.vipOnList.find(it => it.memberId == item.memberId) if (vipOn) { return `${vipOn.endDate.split(' ')[0]}到期` } else { return '开通vip助您快速拿证' } }, vipHasOpened(item) { return !!this.vipOnList.find(it => it.memberId == item.memberId) }, // 去精选500题 item=> 当前科目vip信息 to500(item) { // 当前vip是否已开通 if (this.vipHasOpened(item)) { // 跳转 } else { uni.showToast({ title: `请先充值${this.getKmTitle(item.subjects)}vip`, icon: 'none' }) } }, // 去真实考场 item=> 当前科目vip信息 toRealExam(item) { // 当前vip是否已开通 if (this.vipHasOpened(item)) { // 跳转 } else { uni.showToast({ title: `请先充值${this.getKmTitle(item.subjects)}vip`, icon: 'none' }) } }, // 去秘卷 item=> 当前科目vip信息 toSpecExam(item) { // 当前vip是否已开通 if (this.vipHasOpened(item)) { // 跳转 } else { uni.showToast({ title: `请先充值${this.getKmTitle(item.subjects)}vip`, icon: 'none' }) } }, // 去考场实况 item=> 当前科目vip信息 toPlaceLive(item) { // 当前vip是否已开通 if (this.vipHasOpened(item)) { // 跳转 } else { uni.showToast({ title: `请先充值${this.getKmTitle(item.subjects)}vip`, icon: 'none' }) } } } } </script> <style lang="scss" scoped> .km-item { margin-right: 8px; width: 72px; height: 30px; line-height: 30px; font-size: 12px; color: #333; text-align: center; border-radius: 15px; border: 1px solid #CCCCCC; } .actived { background: linear-gradient(90deg, #E66501 0%, #F8A42C 100%); color: #fff; } .km-item:last-of-type { margin-right: 0; } .vip-info { position: absolute; top: 15px; left: 10px; display: flex; align-items: center; } .corner { position: absolute; bottom: 0; left: 0; width: 77px; height: 23px; background: linear-gradient(0deg, #E66501 0%, #F8A42C 100%); opacity: 0.86; border-radius: 0px 8px 0px 8px; display: flex; align-items: center; justify-content: center; font-size: 12px; color: #fff; } .renew { position: absolute; right: 10%; bottom: 15px; display: flex; align-items: center; justify-content: center; width: 185rpx; height: 52rpx; background: #873E1D; border-radius: 26rpx; font-size: 12px; color: #F6E99F; } .buy { position: absolute; left: 45%; transform: translateX(-50%); bottom: 15px; display: flex; align-items: center; justify-content: center; width: 200rpx; height: 60rpx; background: #873E1D; border-radius: 30rpx; font-size: 14px; color: #F6E99F; } .study { display: flex; align-items: center; justify-content: center; width: 161rpx; height: 67rpx; background: #F6E99F; border-radius: 34rpx; font-size: 12px; color: #873E1D; } .video-box { padding: 20rpx; width: 694rpx; height: 369rpx; background: #F9F3E7; border: 2rpx solid #CF8B6D; border-radius: 16rpx; } </style>