|
|
<template> <view class="content"> <up-navbar title="理论学习" :leftIconColor="'#333'" :safeAreaInsetTop="true" :autoBack="true" > <template #right> <view class="u-nav-slot flex" @click="show = true"> <view class="txt">{{ usecarStore.carInfo.carTypeName }}</view> <u-icon name="arrow-down-fill" color="#333" size="12"></u-icon> </view> </template> </up-navbar> <view class="tabs flex"> <view class="tab" @click="changeTab(1)" :class="{active: currentTab==1}">科目一</view> <view class="tab" @click="changeTab(4)" :class="{active: currentTab==4}">科目四</view> </view> <view class="swiperBox"> <u-swiper :list="bannerList" @click="swiperClick" :dots-styles="dotsStyles" indicatorMode="dot" keyName="cover" height="160rpx"></u-swiper> </view> <view class="notice" v-if="nodes"> <view class="yellowT">通知/</view> <rich-text :nodes="nodes"></rich-text> </view> <view class="iconBox"> <view class="iconComl"> <!-- @click="$goPage(item.url)" --> <view class="item" v-for="(item,index) in leftItem" :key="index" @click="goPage(item)"> <view class="icon"> <image :src="item.icon" mode=""></image> </view> <view class="text">{{item.name}}</view> </view> </view> <view class="centerComl"> <view class="ctItem" @click="goAndSetCar({type: 'types', value: ''})"> <view class="txt">顺序练习</view> <view class="txt">{{adCount.orderAlready }} <text>/</text> {{ adCount.orderTotal }}</view> </view> <!-- $goPage('/pages/vip/vipEntry/vipEntry') --> <view class="ctItem" @click="goAndSetCar({type: 'sift', value: '1'})"> <view class="txt">精选试题</view> <view class="txt">{{adCount.siftAlready }}<text>/</text>{{ adCount.siftTotal }}</view> </view> </view> <view class="iconComl"> <!-- @click="$goPage(item.url)" $noDoFn --> <view class="item" v-for="(item,index) in rightItem" :key="index" @click="goPage(item)"> <view class="icon"> <image :src="item.icon" mode=""></image> </view> <view class="text">{{ item.name }}</view> </view> </view> </view> <view class="simulatedExam flex-b"> <view class="leftTxt"> <view class="h8">科{{ usecarStore.carInfo.stepType==1? '一': '四'}}模拟考试</view> <view class="text">考试次数:{{ examInfo.accumulate }}次</view> <view class="text">预测通过率:{{ examInfo.exampassRate}}%</view> <view class="btnBox flex"> <!-- @click="$goPage('/pages/exercises/examSubjiect1/examSubjiect1')" --> <view class="btnTxt" @click="$goPage('/pages/exercises/examSubjiect1/examSubjiect1')">开始考试</view> <view class="btnIcon"> <image src="@/static/images/theory/sanjx.png" mode=""></image> </view> </view> </view> <view class="rightImg"> <image src="@/static/images/theory/computed.png" mode=""></image> </view> </view> <view class="ul flex"> <view class="li" v-for="(item,index) in bottomItem" :key="index" @click="$goPage('pages/exercises/examIntroduction/examIntroduction?tab='+index)"> <view class="icon"> <image :src="item.icon" mode=""></image> </view> <view class="txt">{{ item.name }}</view> </view> </view> <u-picker :show="show" :columns="columns" keyName="title" @close="show=false" @cancel="show=false" @confirm="confirmPicker"></u-picker> </view> </template>
<script setup> import { ref } from 'vue' import { questbanktypeApi, indexNoticeApi, indexAdApi, indexAdCount, examProcessInfo, idexExam} from '@/config/api.js' import carStore from '@/store/modules/car.js' let usecarStore = carStore() const list1 = [ new URL('@/static/images/bigImg/banner1.png', import.meta.url).href, new URL('@/static/images/bigImg/banner2.png', import.meta.url).href, ] function swiperClick(val) { let item = bannerList.value[val] if(!item.url) return usecarStore.webLink = item.url uni.navigateTo({ url:'/pages/exercises/webView/webView' }) } import { onPullDownRefresh, onShow } from "@dcloudio/uni-app" const currentTab = ref(1) const dotsStyles = ref({ backgroundColor: '#E8E9EC', border: '1px #E8E9EC solid', color: '#fff', selectedBackgroundColor: '#1989FA', selectedBorder: '1px #1989FA solid' }) const leftItem = ref([ {name: '分类学习', icon: new URL('@/static/images/theory/theoryIcon1.png', import.meta.url).href, url: '/pages/exercises/categoryExercises/categoryExercises'}, {name: '章节练习', icon: new URL('@/static/images/theory/theoryIcon7.png', import.meta.url).href, url: '/pages/exercises/chapter/chapter'}, {name: '题型练习', icon: new URL('@/static/images/theory/theoryIcon6.png', import.meta.url).href, url: '/pages/exercises/queTypeExercises/queTypeExercises'}, {name: '精选试题', icon: new URL('@/static/images/theory/theoryIcon9.png', import.meta.url).href, url: '/pages/exercises/brushQuestions/brushQuestions'}, ]) const rightItem = ref([ {name: '错题收藏', icon: new URL('@/static/images/theory/theoryIcon8.png', import.meta.url).href, url: '/pages/exercises/wrongQuestion/wrongQuestion'}, {name: '仿真考试', icon: new URL('@/static/images/theory/theoryIcon10.png', import.meta.url).href, url: '/pages/exercises/beforeExam/beforeExam'}, {name: '我的学习', icon: new URL('@/static/images/theory/theoryIcon12.png', import.meta.url).href, url: '/pages/exercises/myStudy/myStudy'}, {name: '考前密卷', icon: new URL('@/static/images/theory/theoryIcon11.png', import.meta.url).href, url: '/pages/vip/vipEntry/vipEntry'}, ]) const bottomItem = ref([ {name: '考试简介', icon: new URL('@/static/images/theory/theoryIcon3.png', import.meta.url).href, url: ''}, {name: '考试准备', icon: new URL('@/static/images/theory/theoryIcon2.png', import.meta.url).href, url: ''}, {name: '考试流程', icon: new URL('@/static/images/theory/theoryIcon4.png', import.meta.url).href, url: ''}, {name: '注意事项', icon: new URL('@/static/images/theory/theoryIcon5.png', import.meta.url).href, url: ''}, ]) function goPage(item) { let arr = ['密卷'] if(arr.includes(item.name)) { return uni.$u.toast('正在开发,敬请期待') } if(item.name=='精选试题') { goAndSetCar({type: 'sift', value: '1'}) return } uni.navigateTo({ url: item.url }) } function changeTab(num) { currentTab.value = num usecarStore.setCar('stepType', num) upDataFn() } // 顺序练题
function goAndSetCar(item) { usecarStore.setCar(item.type, item.value) uni.navigateTo({ url: '/pages/exercises/brushQuestions/brushQuestions' }) } // 选择车型
function confirmPicker(item) { let value = item.value[0] usecarStore.setCar('carType', value.carType) usecarStore.setCar('carTypeName', value.title) show.value = false } // 请求车类型
let show = ref(false) let columns = ref([]) async function questbanktypeFn() { const {data: res} = await questbanktypeApi() columns.value = [res] } questbanktypeFn() async function upDataFn() { try{ uni.showLoading({ title: '正在加载...' }) await indexNotice() await indexAd() await indexAdCountFn() await idexExamFn() uni.hideLoading() }catch(e){ uni.hideLoading() } } // 消息请求
const nodes = ref('') async function indexNotice() { const {data: res} = await indexNoticeApi(usecarStore.carInfo.stepType) if(res.length) { nodes.value = res[0].content } // console.log(res)
} indexNotice() // 轮播图
let bannerList = ref([]) async function indexAd() { const {data: res} = await indexAdApi(usecarStore.carInfo.stepType) if(res.length) bannerList.value = res console.log(res) } indexAd() // 统计多少题目
let adCount = ref({}) async function indexAdCountFn() { const {data:res} = await indexAdCount({subject: usecarStore.carInfo.stepType, carType: usecarStore.carInfo.carType, city: usecarStore.carInfo.city}) adCount.value = res } // 模拟考试通过率
let examInfo = ref({}) async function idexExamFn() { const {data:res} = await idexExam({stepType: usecarStore.carInfo.stepType, carType: usecarStore.carInfo.carType}) examInfo.value = res } idexExamFn() onShow(()=>{ indexAdCountFn() }) onPullDownRefresh(()=>{ upDataFn() uni.stopPullDownRefresh() }) </script>
<style lang="scss" scoped> image { display: block; width: 100%; height: 100%; } .tabs { display: flex; height: 100rpx; width: 100%; justify-content: center; .tab { color: #333; position: relative; padding: 0 40rpx; font-weight: 400; flex: 1; text-align: center; &.active { width: 100%; &::before { content: ''; position: absolute; left: 50%; bottom: -20rpx; width: 30rpx; height: 4rpx; background: #333; font-weight: 700; border-radius: 2rpx; transform: translateX(-50%); } } } } .content { padding: 100rpx 30rpx 30rpx 30rpx; .u-nav-slot { .txt { font-size: 28rpx; margin-right: 10rpx; } } .swiperBox { padding-top: 20rpx; } .notice { padding: 18rpx; background: #FEF9ED; border-radius: 8rpx; margin-top: 20rpx; font-size: 28rpx; display: flex; .yellowT { font-weight: 800; color: #F1AD40; font-style: italic; display: inline-block; white-space: nowrap; margin-right: 10rpx; } .txt { display: inline-block; } } .iconBox { display: flex; justify-content: space-between; padding: 60rpx 30rpx; .iconComl { display: flex; flex-direction: column; .item { text-align: center; margin-bottom: 40rpx; display: flex; flex-direction: column; justify-content: center; align-items: center; .icon { width: 72rpx; height: 72rpx; } .text { font-size: 28rpx; margin-top: 10rpx; } } } .centerComl { display: flex; flex-direction: column; justify-content: space-around; padding-bottom: 30rpx; .ctItem { width: 230rpx; height: 230rpx; background: url('../../../static/images/circular1.png') no-repeat; background-size: 100% 100%; border-radius: 50%; // border: 10px solid;
// opacity: 0.1;
// border-image: linear-gradient(0deg, #4FACFE, #00F2FE) 10 10;
display: flex; align-items: center; justify-content: center; flex-direction: column; &:last-child { background: url('../../../static/images/circular2.png') no-repeat; background-size: 100% 100%; } .txt { font-size: 32rpx; color: #fff; padding: 6rpx 0; } } } }
.simulatedExam { background: #DFF6FF; border-radius: 20rpx; padding: 30rpx; // margin-top: 40rpx;
.leftTxt { flex: 1; width: 0; .h8 { font-weight: bold; font-size: 44rpx; } .text { font-size: 28rpx; margin-top: 12rpx; } .btnBox { width: 188rpx; height: 66rpx; background: #3776FF; border-radius: 33rpx; display: flex; justify-content: center; margin-top: 30rpx; .btnTxt { font-size: 30rpx; color: #FFFFFF; } .btnIcon { width: 10rpx; height: 12rpx; margin-left: 12rpx; } } } .rightImg { width: 256rpx; height: 256rpx; img { } } } .ul { padding: 20rpx 0 0 0; justify-content: space-between; .li { width: 23%; height: 174rpx; background: linear-gradient(0deg, #FFFFFF 0%, #E5F7FF 100%); box-shadow: 0px 2px 2px 0px #E5F7FF; border-radius: 10px; display: flex; flex-direction: column; align-items: center; justify-content: center; .icon { width: 58rpx; height: 60rpx; margin: 0 auto; } .txt { font-weight: 500; font-size: 28rpx; margin-top: 24rpx; text-align: center; } } } } </style>
|