pull/22/head
脆皮鸭 1 year ago
parent 37c5de0899
commit f762ca430d
  1. 11
      src/jtools/api/question.js
  2. 47
      src/pages/index/components/Subject1.vue
  3. 343
      src/pages/index/components/Subject2.vue
  4. 3
      src/pages/index/index.vue
  5. 95
      src/pages/questionBank/baseOperate.vue
  6. 58
      src/pages/questionBank/components/Question.vue
  7. 109
      src/pages/questionBank/exclusiveExercise.vue
  8. 45
      src/pages/questionBank/practiceExams.vue
  9. 45
      src/pages/questionBank/questionBank.vue
  10. 55
      src/pages/questionBank/videoDetail.vue
  11. 4
      src/pages/questionBank/wrongQuestion.vue

@ -60,3 +60,14 @@ export function queryProjectList(data) {
noToken:true noToken:true
}); });
} }
//
//获取专项题目数量
export function querySpecialNum(data) {
return request({
url: 'driver-api/tdQuestion/querySpecialNum',
method: 'POST',
data,
noToken:true
});
}

@ -15,7 +15,7 @@
</view> </view>
</view> </view>
<view class="box-item flex ai-c jc-c"> <view class="box-item flex ai-c jc-c">
<view class="flex jc-c ai-c relative" style="width: 230rpx;height: 230rpx;" @tap="toExams"> <view class="flex jc-c ai-c relative" style="width: 230rpx;height: 230rpx;" @tap="toExams('title=模拟考试')">
<image style="width: 230rpx;height: 230rpx;position: absolute;left: 0;top: 0;" src="../../../static/image/index/orange_bg.png"></image> <image style="width: 230rpx;height: 230rpx;position: absolute;left: 0;top: 0;" src="../../../static/image/index/orange_bg.png"></image>
<view class="btn2-item flex ai-c jc-c"> <view class="btn2-item flex ai-c jc-c">
<view class="text-center cor-fff" style="line-height: 40rpx;"> <view class="text-center cor-fff" style="line-height: 40rpx;">
@ -60,7 +60,7 @@
<view class="mt5">真实考场模拟</view> <view class="mt5">真实考场模拟</view>
</view> </view>
</view> </view>
<view class="wp33 flex ai-c jc-c"> <view class="wp33 flex ai-c jc-c" @tap="toExams('title=考前密卷&isExam1=1')">
<view class="text-center wp100"> <view class="text-center wp100">
<image style="width: 72rpx;height: 72rpx;margin: 0 auto" <image style="width: 72rpx;height: 72rpx;margin: 0 auto"
src="../../static/image/index/testbeforeicon.png"></image> src="../../static/image/index/testbeforeicon.png"></image>
@ -137,36 +137,41 @@
}) })
}, },
toVip(){ toVip(){
if(storage.get('token')){ // if(storage.get('token')){
uni.navigateTo({ // uni.navigateTo({
url:"/pages/index/videoVip?subject="+this.subject // url:"/pages/index/videoVip?subject="+this.subject
}) // })
}else{ // }else{
uni.navigateTo({ // uni.navigateTo({
url:'/pages/login/login' // url:'/pages/login/login'
}) // })
} // }
uni.showToast({
title:'敬请期待',
icon:'none'
})
}, },
toClass(){ toClass(){
if(storage.get('token')){ uni.showToast({
title:'敬请期待',
icon:'none'
})
},
toAnswer(title,val) {
if(title=='精简500题'){
uni.navigateTo({ uni.navigateTo({
url:"/pages/questionBank/baseOperate" url:"/pages/questionBank/questionBank?navTitle="+title+"&subject="+this.subject+"&needVip="+val+"&isVip=1"
}) })
}else{ }else{
uni.navigateTo({ uni.navigateTo({
url:'/pages/login/login' url:"/pages/questionBank/questionBank?navTitle="+title+"&subject="+this.subject+"&needVip="+val
}) })
} }
}, },
toAnswer(title,val) { toExams(val){
uni.navigateTo({
url:"/pages/questionBank/questionBank?navTitle="+title+"&subject="+this.subject+"&needVip="+val
})
},
toExams(){
if(storage.get('token')){ if(storage.get('token')){
uni.navigateTo({ uni.navigateTo({
url:"/pages/questionBank/practiceExams?subject="+this.subject url:"/pages/questionBank/practiceExams?subject="+this.subject+'&'+val
}) })
}else{ }else{
uni.navigateTo({ uni.navigateTo({

@ -1,11 +1,13 @@
<template> <template>
<view> <view>
<view class="box-nav"> <view class="box-nav">
<image style="width: 100%;" src="../../../static/image/index/index_bg.jpg"></image> <image style="width: 100%;" src="../../../static/image/index/index_bg.jpg"></image>
<view style="width: 100%;position: absolute;top: 80px;left: 0;" class="flex jc-c"> <view style="width: 100%;position: absolute;top: 80px;left: 0;" class="flex jc-c">
<image style="width: 694rpx" mode="widthFix" :src="subject=='2'?'../../../static/image/index/subject2_bg.png':'../../../static/image/index/subject3_bg.png'"></image> <image style="width: 694rpx" mode="widthFix"
:src="subject=='2'?'../../../static/image/index/subject2_bg.png':'../../../static/image/index/subject3_bg.png'">
</image>
</view> </view>
</view> </view>
<view class="p14lr" style="margin-top: -20px;"> <view class="p14lr" style="margin-top: -20px;">
<view class="video_box"> <view class="video_box">
<view class="flex ai-c jc-sb mt5"> <view class="flex ai-c jc-sb mt5">
@ -15,15 +17,24 @@
<u-icon name="list" color="#05C341" size="18"></u-icon> <u-icon name="list" color="#05C341" size="18"></u-icon>
</view> </view>
</view> </view>
<view class="flex ai-c jc-fa mt15" style="flex-wrap: wrap;"> <view class="skill-sequence-panel-content-wrapper">
<view class="tab_iem mr10 mb10" :class="videoIndex===index?'checked_tab':''" v-for="(item,index) of operateList" :key="index" @tap="checkVideo(index)">{{item.description}}</view> <scroll-view class="skill-sequence-panel-content" scroll-x :scroll-into-view="intoindex">
</view> <view class="skill-sequence-skill-wrapper tab_iem m15tb" :class="videoIndex===index?'checked_tab':''"
<view @tap="toVideo"> v-for="(item,index) of operateList" :key="index" :id='"text"+index' @tap="checkVideo(index)">
<view class="wp100 relative" style="height: 362rpx;border-radius: 16rpx;"> {{item.description}}
<image style="width: 100%;height: 362rpx;border-radius: 16rpx;" id="myVideo" src="../../../static/image/index/jpsp.png"></image> </view>
<image class="play_btn_2" src="../../static/image/index/play.png" /> </scroll-view>
</view>
</view> </view>
<swiper class="swiper" :current="videoIndex" style="height: 362rpx;" :autoplay="false"
:disable-programmatic-animation="true" @change="onChange">
<swiper-item v-for="(item,index) of operateList" :key="index" @tap="toVideo">
<view class="wp100 relative p5lr" style="height: 362rpx;border-radius: 16rpx;overflow: hidden;">
<image style="width: 100%;height: 362rpx;border-radius: 16rpx;" mode="widthFix"
:src="item.videoList[0].videoUrl+'?x-oss-process=video/snapshot,t_0,f_jpg'"></image>
<image class="play_btn_2" src="../../static/image/index/play.png" />
</view>
</swiper-item>
</swiper>
</view> </view>
<view class="video_box mt10"> <view class="video_box mt10">
<view class="flex ai-c jc-sb"> <view class="flex ai-c jc-sb">
@ -33,19 +44,20 @@
<u-icon color="#666" name="arrow-right" size="18"></u-icon> <u-icon color="#666" name="arrow-right" size="18"></u-icon>
</view> </view>
</view> </view>
<view class="flex p14lr p20tb bc-fff mt10" style="border-bottom: 1rpx solid #DDDCDC;;" v-for="(item,index) of operateList" :key="index" @tap="toVideo"> <view class="flex p14lr p20tb bc-fff mt10" style="border-bottom: 1rpx solid #DDDCDC;"
<view class="pic relative"> v-for="(item,index) of videoList" :key="index" @click="toOperateDetail(item.videoId)">
<image class="pic" src="../../static/image/index/index_bg.jpg"></image> <view class="pic relative" style="overflow: hidden;">
<image class="play_btn_3" src="../../static/image/index/play.png" /> <image class="pic" mode="widthFix" :src="item.videoUrl+'?x-oss-process=video/snapshot,t_0,f_jpg'"></image>
</view> <image class="play_btn_3" src="../../static/image/index/play.png" />
<view class="ml10"> </view>
<text class="fs16 cor-000 fw600">上车下车的方法</text> <view class="ml10">
<view class="fs14 mt5 cor-666">上车下车的方法</view> <text class="fs16 cor-000 fw600">{{baseList[0]?.description}}</text>
</view> <view class="fs14 mt5 cor-666">{{item.description}}</view>
</view>
</view> </view>
</view> </view>
</view> </view>
</view> </view>
</template> </template>
<script> <script>
@ -54,125 +66,198 @@
queryProjectList queryProjectList
} from '@/jtools/api/question'; } from '@/jtools/api/question';
import storage from '@/jtools/storage'; import storage from '@/jtools/storage';
export default { export default {
name: "Subject2", name: "Subject2",
props:{ props: {
subject:{ subject: {
type:[String,Number] type: [String, Number]
} }
},
data(){
return{
diverTypeIndex:0,
diverTypeList:[],
videoIndex:0,
projectId:undefined,
operateList:[]
}
},
async mounted(){
await this.getDiverType()
},
methods:{
getOperateList(){
queryProjectList({
"carTypeId": storage.get('carType') || '1001',
"subject": String(this.subject),
"type": "2"
}).then(resp=>{
console.log(resp);
})
}, },
toVideo(){ data() {
uni.navigateTo({ return {
url:"/pages/questionBank/videoDetail?driveType="+this.diverTypeList[this.diverTypeIndex].configItemCode+"&subject="+this.subject+"&projectId="+this.projectId+"&type=1" intoindex: '',
}) diverTypeIndex: 0,
diverTypeList: [],
videoIndex: 0,
projectId: undefined,
operateList: [],
baseList: [],
videoList: []
}
}, },
getVideoList(){ async mounted() {
queryProjectList({ await this.getDiverType()
"carTypeId": storage.get('carType') || '1001',
"driveType": this.diverTypeList[this.diverTypeIndex].configItemCode,
"subject": String(this.subject),
"type": "1"
}).then(resp=>{
this.operateList=resp.data
this.projectId=this.operateList[0]?.projectId
})
}, },
getDiverType(){ methods: {
const carTypeId=storage.get('carType') || '1001' onChange(e) {
querySysConfigList(carTypeId,'DriveType').then(resp=>{ this.videoIndex = e.detail.current
if(resp.code==='0000'){ this.$nextTick(() => {
this.diverTypeList=resp.data const index = this.videoIndex - 1 < 0 ? 0 : this.videoIndex - 1
this.intoindex = "text" + index
});
},
getOperateList() {
queryProjectList({
"carTypeId": storage.get('carType') || '1001',
"subject": String(this.subject),
"driveType": this.diverTypeList[this.diverTypeIndex].configItemCode,
"type": "2"
}).then(resp => {
if (resp.code === '0000') {
this.baseList = resp.data
this.videoList = resp.data[0].videoList.slice(0, 5)
}
})
},
formateTime(time) {
const h = parseInt(time / 3600)
const minute = parseInt(time / 60 % 60)
const second = Math.ceil(time % 60)
const hours = h < 10 ? '0' + h : h
const formatSecond = second > 59 ? 59 : second
return `${hours > 0 ? `${hours}:` : ''}${minute < 10 ? '0' + minute : minute}:${formatSecond < 10 ? '0' + formatSecond : formatSecond}`
},
toVideo() {
let arr = JSON.parse(JSON.stringify(this.operateList))
arr = arr.map(item => {
return {
...item,
videoUrl: item.videoList[0]?.videoUrl,
videoTime:this.formateTime(item.videoList[0]?.videoTime)
}
})
let jsonString = JSON.stringify(arr)
uni.navigateTo({
url: "/pages/questionBank/videoDetail?videoList=" + jsonString + "&subject=" + this.subject +
"&projectId=" + this.projectId + "&type=1"
})
},
toOperateDetail(val){
let arr = JSON.parse(JSON.stringify(this.baseList[0].videoList))
arr = arr.map(item => {
return {
...item,
projectId:item.videoId,
videoTime:this.formateTime(item.videoTime)
}
})
let jsonString = JSON.stringify(arr)
uni.navigateTo({
url: "/pages/questionBank/videoDetail?videoList=" + jsonString + "&subject=" + this.subject +
"&projectId=" + val + "&type=2"
})
},
getVideoList() {
queryProjectList({
"carTypeId": storage.get('carType') || '1001',
"driveType": this.diverTypeList[this.diverTypeIndex].configItemCode,
"subject": String(this.subject),
"type": "1"
}).then(resp => {
this.operateList = resp.data
this.projectId = this.operateList[0]?.projectId
})
},
getDiverType() {
const carTypeId = storage.get('carType') || '1001'
querySysConfigList(carTypeId, 'DriveType').then(resp => {
if (resp.code === '0000') {
this.diverTypeList = resp.data
this.getVideoList() this.getVideoList()
this.getOperateList()
} }
}) })
}, },
changeDiverType(){ changeDiverType() {
this.diverTypeIndex=this.diverTypeIndex==0?1:0 this.diverTypeIndex = this.diverTypeIndex == 0 ? 1 : 0
this.videoIndex = 0
this.getVideoList() this.getVideoList()
}, },
checkVideo(val){ checkVideo(val) {
this.projectId=this.operateList[val]?.projectId this.projectId = this.operateList[val]?.projectId
this.videoIndex=val this.videoIndex = val
}, },
toDetail(){ toDetail() {
uni.navigateTo({ uni.navigateTo({
url:"/pages/questionBank/baseOperate" url: "/pages/questionBank/baseOperate?subject=" + this.subject
}) })
}
} }
} }
}
</script> </script>
<style scoped> <style scoped>
.box-nav{ .box-nav {
width: 100%; width: 100%;
position: relative; position: relative;
} }
.center-box{
position: absolute; .center-box {
width: 100%; position: absolute;
top: 170rpx; width: 100%;
padding: 0 28rpx; top: 170rpx;
} padding: 0 28rpx;
.video_box{ }
width: 100%;
background: #FFFFFF; .video_box {
border-radius: 16rpx; width: 100%;
padding: 14px; background: #FFFFFF;
} border-radius: 16rpx;
.tab_iem{ padding: 14px;
padding: 0 5px; }
height: 56rpx;
line-height: 56rpx; .tab_iem {
text-align: center; padding: 0 5px;
background: #F5F5F5; height: 56rpx;
border-radius: 10rpx; line-height: 56rpx;
color:#333 text-align: center;
background: #F5F5F5;
border-radius: 10rpx;
color: #333
}
.checked_tab {
background: linear-gradient(90deg, #11DF20 0%, #01B74F 100%);
color: #fff
}
.pic {
width: 300rpx;
height: 169rpx;
background: #00B74F;
border-radius: 8rpx;
}
.play_btn_3 {
width: 65rpx;
height: 65rpx;
position: absolute;
left: 117.5rpx;
top: 52rpx
}
.play_btn_2 {
width: 65rpx;
height: 65rpx;
position: absolute;
left: calc((100% - 65rpx)/2);
top: 148.5rpx
}
/*scroll-view外层*/
.skill-sequence-panel-content-wrapper {
position: relative;
white-space: nowrap;
}
/*scroll-view本身*/
.skill-sequence-panel-content {
min-width: 100%;
}
/*scroll-view内层*/
.skill-sequence-skill-wrapper {
display: inline-block;
margin-right: 15px;
} }
.checked_tab{
background: linear-gradient(90deg, #11DF20 0%, #01B74F 100%);
color:#fff
}
.pic{
width: 300rpx;
height: 169rpx;
background: #00B74F;
border-radius: 8rpx;
}
.play_btn_3{
width: 65rpx;
height: 65rpx;
position: absolute;
left:117.5rpx;
top: 52rpx
}
.play_btn_2{
width: 65rpx;
height: 65rpx;
position: absolute;
left: calc((100% - 65rpx)/2);
top: 148.5rpx
}
</style> </style>

@ -8,8 +8,9 @@
<Subject1 :subject="subject" :rightList="rightList" :wrongList="wrongList" /> <Subject1 :subject="subject" :rightList="rightList" :wrongList="wrongList" />
</template> </template>
<template v-else> <template v-else>
<subject2 :subject="subject" ref="subjectRef" /> <Subject2 :subject="subject" ref="subjectRef" />
</template> </template>
</view> </view>
</view> </view>
</template> </template>

@ -8,11 +8,15 @@
<!-- <view class="flex ai-c"> <!-- <view class="flex ai-c">
<view class="car_item mr10" v-for="(item,index) of carTypeList" :key="index" @tap="chooseCar(item.value)" :class="item.value===tCar?'checked_car':'unchecked_car'">{{item.label}}</view> <view class="car_item mr10" v-for="(item,index) of carTypeList" :key="index" @tap="chooseCar(item.value)" :class="item.value===tCar?'checked_car':'unchecked_car'">{{item.label}}</view>
</view> --> </view> -->
<view class="flex p14 bc-fff mt10" style="border-radius: 16rpx;" v-for="(item,index) of videoList" :key="index" @tap="toDetail"> <view class="flex p14lr p20tb bc-fff mt10" style="border-bottom: 1rpx solid #DDDCDC;;"
<image class="pic" src="../../static/image/index/index_bg.png"></image> v-for="(item,index) of videoList" :key="index" @tap="toOperateDetail(item.videoId)">
<view class="pic relative" style="overflow: hidden;">
<image class="pic" mode="widthFix" :src="item.videoUrl+'?x-oss-process=video/snapshot,t_0,f_jpg'"></image>
<image class="play_btn_2" src="../../static/image/index/play.png" />
</view>
<view class="ml10"> <view class="ml10">
<text class="fs16 cor-000 fw600">上车下车的方法</text> <text class="fs16 cor-000 fw600">{{allVideoList[0]?.description}}</text>
<view class="fs14 mt5 cor-666">上车下车的方法</view> <view class="fs14 mt5 cor-666">{{item.description}}</view>
</view> </view>
</view> </view>
</view> </view>
@ -20,25 +24,22 @@
</template> </template>
<script> <script>
import {
querySysConfigList,
queryProjectList
} from '@/jtools/api/question';
import storage from '@/jtools/storage';
export default { export default {
data(){ data(){
return{ return{
subject:'1',
tCar:0, tCar:0,
categoryList:[{ categoryList:[{
name:'手动挡C1' name:'手动挡C1'
},{ },{
name:'自动挡C2' name:'自动挡C2'
}], }],
carTypeList:[{ allVideoList:[],
label:'捷达',
value:0
},{
label:'新桑塔纳',
value:1
},{
label:'爱丽舍',
value:2
}],
videoList:[{ videoList:[{
label:"111" label:"111"
},{ },{
@ -50,12 +51,69 @@
}] }]
} }
}, },
onLoad(op){
if(op.subject){
this.subject=op.subject
this.getDiverType()
}
},
methods:{ methods:{
formateTime(time) {
const h = parseInt(time / 3600)
const minute = parseInt(time / 60 % 60)
const second = Math.ceil(time % 60)
const hours = h < 10 ? '0' + h : h
const formatSecond = second > 59 ? 59 : second
return `${hours > 0 ? `${hours}:` : ''}${minute < 10 ? '0' + minute : minute}:${formatSecond < 10 ? '0' + formatSecond : formatSecond}`
},
toOperateDetail(val){
let arr = JSON.parse(JSON.stringify(this.allVideoList[0].videoList))
arr = arr.map(item => {
return {
...item,
projectId:item.videoId,
videoTime:this.formateTime(item.videoTime)
}
})
let jsonString = JSON.stringify(arr)
uni.navigateTo({
url: "/pages/questionBank/videoDetail?videoList=" + jsonString + "&subject=" + this.subject +
"&projectId=" + val + "&type=2"
})
},
getOperateList() {
queryProjectList({
"carTypeId": storage.get('carType') || '1001',
"subject": String(this.subject),
"driveType": this.categoryList[this.tCar].configItemCode,
"type": "2"
}).then(resp => {
if(resp.code==='0000'){
this.videoList=resp.data[0]?resp.data[0].videoList:[]
this.allVideoList=resp.data
}
})
},
getDiverType() {
const carTypeId = storage.get('carType') || '1001'
querySysConfigList(carTypeId, 'DriveType').then(resp => {
if (resp.code === '0000') {
this.categoryList=resp.data.map(item=>{
return {
...item,
name:item.configItemName
}
})
this.getOperateList()
}
})
},
chooseCar(val){ chooseCar(val){
this.tCar=val this.tCar=val
}, },
changeCategory(val){ changeCategory(val){
this.tCar=val.index
this.getOperateList()
}, },
toDetail(){ toDetail(){
uni.navigateTo({ uni.navigateTo({
@ -93,4 +151,11 @@
background: #00B74F; background: #00B74F;
border-radius: 8rpx; border-radius: 8rpx;
} }
.play_btn_2 {
width: 65rpx;
height: 65rpx;
position: absolute;
left: 117.5rpx;
top: 52rpx
}
</style> </style>

@ -1,7 +1,7 @@
<template> <template>
<view class="content"> <view class="content">
<view class="flex ai-c jc-c"> <view class="flex ai-c jc-c">
<view class="flex type_box jc-sb ai-c"> <view class="flex type_box jc-sb ai-c" v-if="navTitle!=='考前密卷'">
<view class="type_item" v-for="(item,index) of tabsList" :key="index" :class="tCurrent==item.value?'checked':'unchecked'" @tap="sectionChange(item.value)">{{item.label}}</view> <view class="type_item" v-for="(item,index) of tabsList" :key="index" :class="tCurrent==item.value?'checked':'unchecked'" @tap="sectionChange(item.value)">{{item.label}}</view>
</view> </view>
</view> </view>
@ -83,7 +83,7 @@
<view class="wp100 flex jc-sb ai-c p14 bc-fff" v-if="isShowAll" style="position: fixed;bottom: 0;left: 0;"> <view class="wp100 flex jc-sb ai-c p14 bc-fff" v-if="isShowAll" style="position: fixed;bottom: 0;left: 0;">
<view style="width: 220rpx;"> <view style="width: 220rpx;">
<view v-if="type==='practice'" style="width: 220rpx;height: 80rpx;"></view> <view v-if="type==='practice'" style="width: 220rpx;height: 80rpx;"></view>
<view v-else class="btn" style="text-align: center;" @tap="submitPaper"> <view v-else-if="type=='exam'" class="btn" style="text-align: center;" @tap="submitPaper">
<u-count-down ref="countDown_1" :time=" 1*60*60 * 1000" format="HH:mm:ss" @change="timeChange"></u-count-down> <u-count-down ref="countDown_1" :time=" 1*60*60 * 1000" format="HH:mm:ss" @change="timeChange"></u-count-down>
<text>交卷</text> <text>交卷</text>
</view> </view>
@ -147,8 +147,14 @@
</view> </view>
<template #confirmButton> <template #confirmButton>
<view class="p10" > <view class="p10" >
<u-button :customStyle="{width:'45%',marginRight:'10px',height:'68rpx',lineHeight:'68rpx',borderRadius:'34rpx',color:'#666',border:'1px solid #666',display:'inline-block'}" @click="continueExam">继续考试</u-button> <template v-if="isShowAll">
<u-button :customStyle="{width:'45%',marginLeft:'10px',height:'68rpx',lineHeight:'68rpx',borderRadius:'34rpx',color:'#fff',backgroundColor:'#05C341',display:'inline-block'}" @click="toSubmit">现在交卷</u-button> <u-button :customStyle="{width:'45%',marginRight:'10px',height:'68rpx',lineHeight:'68rpx',borderRadius:'34rpx',color:'#666',border:'1px solid #666',display:'inline-block'}" @click="continueExam">继续考试</u-button>
<u-button :customStyle="{width:'45%',marginLeft:'10px',height:'68rpx',lineHeight:'68rpx',borderRadius:'34rpx',color:'#fff',backgroundColor:'#05C341',display:'inline-block'}" @click="toSubmit">现在交卷</u-button>
</template>
<template v-else>
<u-button :customStyle="{width:'45%',marginRight:'10px',height:'68rpx',lineHeight:'68rpx',borderRadius:'34rpx',color:'#666',border:'1px solid #666',display:'inline-block'}" @click="toLeave">确定离开</u-button>
<u-button :customStyle="{width:'45%',marginLeft:'10px',height:'68rpx',lineHeight:'68rpx',borderRadius:'34rpx',color:'#fff',backgroundColor:'#05C341',display:'inline-block'}" @click="continueExam">继续考试</u-button>
</template>
</view> </view>
</template> </template>
</u-modal> </u-modal>
@ -157,7 +163,7 @@
<view class="wp100 flex jc-sb p14 bc-fff"> <view class="wp100 flex jc-sb p14 bc-fff">
<view style="width: 220rpx;"> <view style="width: 220rpx;">
<view v-if="type==='practice'" style="width: 220rpx;height: 80rpx;"></view> <view v-if="type==='practice'" style="width: 220rpx;height: 80rpx;"></view>
<view v-else class="btn" style="text-align: center;" @tap="submitPaper"> <view v-else-if="type=='exam'" class="btn" style="text-align: center;" @tap="submitPaper">
<u-count-down ref="countDown_2" :time="1 * 60 * 60 * 1000" format="HH:mm:ss"></u-count-down> <u-count-down ref="countDown_2" :time="1 * 60 * 60 * 1000" format="HH:mm:ss"></u-count-down>
<text>交卷</text> <text>交卷</text>
</view> </view>
@ -263,6 +269,7 @@ export default {
}, },
data() { data() {
return { return {
originArray:'',
showBestAnswer:false, showBestAnswer:false,
nowPrice:68, nowPrice:68,
showVip:false, showVip:false,
@ -305,6 +312,11 @@ export default {
}, },
methods: { methods: {
...mapActions(useQuestionStore,['getCurrentIndex']), ...mapActions(useQuestionStore,['getCurrentIndex']),
toLeave(){
uni.switchTab({
url:'/pages/index/index'
})
},
isShowBest(val){ isShowBest(val){
this.showBestAnswer=val this.showBestAnswer=val
}, },
@ -414,8 +426,10 @@ export default {
}) })
}, },
submitPaper(){ submitPaper(){
this.$refs.countDown_1.pause(); if(this.isShowAll){
this.$refs.countDown_2.pause(); this.$refs.countDown_1.pause();
this.$refs.countDown_2.pause();
}
this.$refs.countDown_3.pause(); this.$refs.countDown_3.pause();
this.$emit('update:isSubmit',true) this.$emit('update:isSubmit',true)
}, },
@ -581,6 +595,7 @@ export default {
this.questionList[this.topicIndex].clickAnswer = this.questionList[this.topicIndex].clickAnswer.replace(reg2,""); this.questionList[this.topicIndex].clickAnswer = this.questionList[this.topicIndex].clickAnswer.replace(reg2,"");
} }
} }
this.originArray=JSON.stringify(this.questionList)
if(this.tCurrent!==1&&this.questionList[this.topicIndex].type!='3'){ if(this.tCurrent!==1&&this.questionList[this.topicIndex].type!='3'){
const arr1=this.questionList[this.topicIndex].clickAnswer.split('') const arr1=this.questionList[this.topicIndex].clickAnswer.split('')
const arr2=this.questionList[this.topicIndex].trueAnswer.split('') const arr2=this.questionList[this.topicIndex].trueAnswer.split('')
@ -644,19 +659,24 @@ export default {
this.$emit('changeTab',index) this.$emit('changeTab',index)
}, },
getQuestionList(val) { getQuestionList(val) {
const arr = JSON.parse(val) if(val&&val.length){
this.questionList=[] const arr = JSON.parse(val)
arr.forEach(item=>{ this.questionList=[]
let isCollect=false arr.forEach(item=>{
if(this.collectList.includes(item.questionId)){ let isCollect=false
isCollect=true if(this.collectList.includes(item.questionId)){
} isCollect=true
this.questionList.push({ }
isChoose:false, this.questionList.push({
isCollect:isCollect, isChoose:false,
...item isCollect:isCollect,
...item
})
}) })
}) }else{
this.questionList=JSON.parse(this.originArray)
}
if(this.navTitle==='顺序答题'){ if(this.navTitle==='顺序答题'){
this.pickerTopic(this[`currentIndex_subject${this.subject}`]) this.pickerTopic(this[`currentIndex_subject${this.subject}`])
}else{ }else{

@ -46,6 +46,7 @@
import neverWriteIcon from "../../static/image/practice/neverWrite_icon.png" import neverWriteIcon from "../../static/image/practice/neverWrite_icon.png"
import { import {
querySysConfigList, querySysConfigList,
querySpecialNum
} from '@/jtools/api/question'; } from '@/jtools/api/question';
import storage from '@/jtools/storage'; import storage from '@/jtools/storage';
export default { export default {
@ -94,8 +95,90 @@
this.subject=op.subject this.subject=op.subject
} }
this.getExamPoint() this.getExamPoint()
this.getQuestionNum()
}, },
methods: { methods: {
getQuestionNum(){
querySpecialNum({
carTypeId:storage.get('carType') || '1001',
subject:this.subject
}).then(resp=>{
if(resp.code==='0000'){
if(this.subject=='1'){
this.list=[{
title:'新规题',
subTitle:resp.data.newQuestionNum+'题',
isNew:1,
isError:0,
image:newRulesIcon
},{
title:'易错题',
isNew:0,
isError:1,
subTitle:resp.data.errorQuestionNum+'题',
image:errorIcon
},{
title:'单选题',
subTitle:resp.data.radioQuestionNum+'题',
isNew:0,
isError:0,
image:newRulesIcon
},{
title:'判断题',
subTitle:resp.data.judgeQuestionNum+'题',
isNew:0,
isError:0,
image:errorIcon
},{
title:'图片题',
subTitle:resp.data.imageQuestionNum+'题',
isNew:0,
isError:0,
image:neverWriteIcon
}]
}else{
this.list=[{
title:'新规题',
subTitle:resp.data.newQuestionNum+'题',
isNew:1,
isError:0,
image:newRulesIcon
},{
title:'易错题',
isNew:0,
isError:1,
subTitle:resp.data.errorQuestionNum+'题',
image:errorIcon
},{
title:'单选题',
subTitle:resp.data.radioQuestionNum+'题',
isNew:0,
isError:0,
image:newRulesIcon
},{
title:'多选题',
subTitle:resp.data.multipleChoiceQuestionNum+'题',
isNew:0,
isError:0,
image:neverWriteIcon
},{
title:'判断题',
subTitle:resp.data.judgeQuestionNum+'题',
isNew:0,
isError:0,
image:errorIcon
},{
title:'图片题',
subTitle:resp.data.imageQuestionNum+'题',
isNew:0,
isError:0,
image:neverWriteIcon
}]
}
}
})
},
getExamPoint(){ getExamPoint(){
const carTypeId=storage.get('carType') || '1001' const carTypeId=storage.get('carType') || '1001'
const examKey = this.subject=='1'?'ExamKeysOfSubjectOne':'ExamKeysOfSubjectFour' const examKey = this.subject=='1'?'ExamKeysOfSubjectOne':'ExamKeysOfSubjectFour'
@ -106,13 +189,31 @@
}) })
}, },
toAnswer(title,isError,isNew) { toAnswer(title,isError,isNew) {
uni.navigateTo({ if(title=='单选题'){
url:"/pages/questionBank/questionBank?navTitle="+title+"&isError="+isError+"&isNew="+isNew uni.navigateTo({
}) url:"/pages/questionBank/questionBank?navTitle="+title+"&isError="+isError+"&isNew="+isNew+"&type=2"+"&subject="+this.subject
})
}else if(title=='多选题'){
uni.navigateTo({
url:"/pages/questionBank/questionBank?navTitle="+title+"&isError="+isError+"&isNew="+isNew+"&type=3"+"&subject="+this.subject
})
}else if(title=='判断题'){
uni.navigateTo({
url:"/pages/questionBank/questionBank?navTitle="+title+"&isError="+isError+"&isNew="+isNew+"&type=1"+"&subject="+this.subject
})
}else if(title=='图片题'){
uni.navigateTo({
url:"/pages/questionBank/questionBank?navTitle="+title+"&isError="+isError+"&isNew="+isNew+"&isImage=1"+"&subject="+this.subject
})
}else{
uni.navigateTo({
url:"/pages/questionBank/questionBank?navTitle="+title+"&isError="+isError+"&isNew="+isNew+"&subject="+this.subject
})
}
}, },
toQuestionBank(val){ toQuestionBank(val){
uni.navigateTo({ uni.navigateTo({
url:"/pages/questionBank/questionBank?navTitle="+val.configItemName+"&examKey="+val.configItemCode url:"/pages/questionBank/questionBank?navTitle="+val.configItemName+"&examKey="+val.configItemCode+"&subject="+this.subject
}) })
}, },
toIconSkill(){ toIconSkill(){

@ -2,12 +2,17 @@
<view> <view>
<!-- <u-navbar title="模拟考试" @rightClick="rightClick" :autoBack="true"> <!-- <u-navbar title="模拟考试" @rightClick="rightClick" :autoBack="true">
</u-navbar> --> </u-navbar> -->
<j-navbar :isDefineBack="true" @toBack="toBack">模拟考试</j-navbar> <j-navbar :isDefineBack="true" @toBack="toBack">{{title}}</j-navbar>
<Question ref="question" :tabsList="tabsList" v-model:isSubmit="isSubmit" type="exam" :subject="subject" navTitle="模拟考试" /> <Question ref="question" :tabsList="tabsList" v-model:isSubmit="isSubmit" :type="type" :isShowAll="isShowAll" :subject="subject" :navTitle="title" @changeTab="changeTab" />
</view> </view>
</template> </template>
<script> <script>
import {
mapState,
mapActions
} from 'pinia' //
import useUserStore from '@/jtools/store/user'
import { import {
getTestQuestion getTestQuestion
} from '@/jtools/api/question'; } from '@/jtools/api/question';
@ -19,6 +24,9 @@
}, },
data() { data() {
return { return {
type:'',
isShowAll:true,
title:"模拟考试",
subject:1, subject:1,
isSubmit:false, isSubmit:false,
tabsList:[{ tabsList:[{
@ -31,23 +39,50 @@
} }
}, },
onLoad(op) { onLoad(op) {
if(op.title){
this.title=op.title
}
if(op.subject){ if(op.subject){
this.subject=op.subject this.subject=op.subject
const param={}
if(op.isExam1){
param.isExam1=op.isExam1
}
getTestQuestion({ getTestQuestion({
carTypeId: storage.get('carType') || '1001', carTypeId: storage.get('carType') || '1001',
subject: this.subject subject: this.subject,
}).then(resp=>{ ...param
}).then(async (resp)=>{
if(resp.code==='0000'){ if(resp.code==='0000'){
this.$refs.question.getQuestionList(JSON.stringify(resp.data)) let arr=resp.data
if(this.title==='考前密卷'){
await this.searchUserVip()
const res = this.vipOnList.some(item => item.subjects == this.subject)
if (!res) {
arr = arr.slice(0, 3)
this.isShowAll = false
}
}
this.type='exam'
this.$refs.question.getQuestionList(JSON.stringify(arr))
} }
}) })
} }
}, },
computed: { computed: {
...mapState(useUserStore, ["vipOnList"])
}, },
methods: { methods: {
...mapActions(useUserStore, ['searchUserVip']),
toBack(){ toBack(){
this.$refs.question.submitPaper() this.$refs.question.submitPaper()
},
changeTab(val){
if(val==1){
uni.navigateTo({
url:"/pages/questionBank/practiceExams?subject="+this.subject+'&title=考前密卷&isExam1=1'
})
}
} }
} }
} }

@ -50,26 +50,12 @@
if (op && op.navTitle) { if (op && op.navTitle) {
this.navTitle = op.navTitle this.navTitle = op.navTitle
const param = {} const param = {}
if (this.navTitle === '顺序答题' || this.navTitle === '精简500题') { if (this.navTitle === '顺序答题') {
if(this.subject=='1'){ if(this.subject=='1'){
this.questionArr = [...this.orderQuestion_subject1] this.questionArr = [...this.orderQuestion_subject1]
}else if(this.subject=='4'){ }else if(this.subject=='4'){
this.questionArr = [...this.orderQuestion_subject4] this.questionArr = [...this.orderQuestion_subject4]
} }
if (this.needVip === 'true') {
if (this.token) {
await this.searchUserVip()
const res = this.vipOnList.some(item => item.subjects == this.subject)
if (!res) {
this.questionArr = this.questionArr.slice(0, 3)
this.isShowAll = false
}
} else {
uni.redirectTo({
url: '/pages/login/login'
});
}
}
this.$refs.question.getQuestionList(JSON.stringify(this.questionArr)) this.$refs.question.getQuestionList(JSON.stringify(this.questionArr))
} else { } else {
if (this.navTitle === '错题本') { if (this.navTitle === '错题本') {
@ -92,9 +78,34 @@
if(op.isNew&&op.isNew=='1'){ if(op.isNew&&op.isNew=='1'){
param.isNew=Number(op.isNew) param.isNew=Number(op.isNew)
} }
queryQuestion(param).then(res => { if(op.type){
param.type=op.type
}
if(op.isImage){
param.isImage=op.isImage
}
if(op.isVip){
param.isVip=op.isVip
}
param.subject=this.subject
param.carTypeId=storage.get('carType') || '1001'
queryQuestion(param).then(async (res) => {
if (res.code == '0000') { if (res.code == '0000') {
this.questionArr = res.data this.questionArr = res.data
if (this.needVip === 'true') {
if (this.token) {
await this.searchUserVip()
const res = this.vipOnList.some(item => item.subjects == this.subject)
if (!res) {
this.questionArr = this.questionArr.slice(0, 3)
this.isShowAll = false
}
} else {
uni.redirectTo({
url: '/pages/login/login'
});
}
}
this.$refs.question.getQuestionList(JSON.stringify(this.questionArr)) this.$refs.question.getQuestionList(JSON.stringify(this.questionArr))
} }
}) })
@ -120,7 +131,7 @@
this.$refs.question.getQuestionList(JSON.stringify(list)) this.$refs.question.getQuestionList(JSON.stringify(list))
} else { } else {
this.$refs.question.isShowBest(false) this.$refs.question.isShowBest(false)
this.$refs.question.getQuestionList(JSON.stringify(this.questionArr)) this.$refs.question.getQuestionList()
} }
}, },
rightClick() { rightClick() {

@ -1,7 +1,7 @@
<template> <template>
<view> <view>
<sunny-video style="width: 100%" videoHeight="422rpx" ref="sunny-video" title="测试视频" <sunny-video style="width: 100%" videoHeight="422rpx" ref="sunny-video"
src="https://img.cdn.aliyun.dcloud.net.cn/guide/uniapp/%E7%AC%AC1%E8%AE%B2%EF%BC%88uni-app%E4%BA%A7%E5%93%81%E4%BB%8B%E7%BB%8D%EF%BC%89-%20DCloud%E5%AE%98%E6%96%B9%E8%A7%86%E9%A2%91%E6%95%99%E7%A8%8B@20200317.mp4" /> :src="videoList[currentIndex].videoUrl" />
<view class="p14tb bc-fff"> <view class="p14tb bc-fff">
<view class="skill-sequence-panel-content-wrapper pr14" v-if="videoType=='test'"> <view class="skill-sequence-panel-content-wrapper pr14" v-if="videoType=='test'">
<scroll-view class="skill-sequence-panel-content" scroll-x> <scroll-view class="skill-sequence-panel-content" scroll-x>
@ -10,7 +10,7 @@
</scroll-view> </scroll-view>
</view> </view>
<view class="flex ai-c jc-sb mt10 wp100 p14"> <view class="flex ai-c jc-sb mt10 wp100 p14">
<text class="fs18 fw600 cor-000">C1捷达-基础操作视频讲解</text> <text class="fs18 fw600 cor-000">{{title}}</text>
<view class="flex" @tap="popupShow=true" v-if="videoType!='test'"> <view class="flex" @tap="popupShow=true" v-if="videoType!='test'">
<text class="fs14 cor-666">更多</text> <text class="fs14 cor-666">更多</text>
<u-icon color="#666" name="arrow-right" size="18"></u-icon> <u-icon color="#666" name="arrow-right" size="18"></u-icon>
@ -20,17 +20,19 @@
<view> <view>
</view> </view>
</view> </view>
<view class="bc-fff pl14"> <view class="bc-fff pl14 pb10">
<view class="skill-sequence-panel-content-wrapper"> <view class="skill-sequence-panel-content-wrapper">
<scroll-view class="skill-sequence-panel-content" scroll-x :scroll-left="164*currentIndex"> <scroll-view class="skill-sequence-panel-content" scroll-x :scroll-left="164*currentIndex">
<view class="skill-sequence-skill-wrapper" v-for="(item, index) in videoList" :key="index" <view class="skill-sequence-skill-wrapper" v-for="(item, index) in videoList" :key="index"
@click="checkVideo(item.projectId)"> @tap="checkVideo(item.projectId)">
<view> <view>
<view class="mb10 relative"> <view class="mb10 relative">
<image class="contain-box" src="../../static/image/index/jpsp.png"></image> <view class="contain-box" style="overflow: hidden;">
<image class="contain-box" mode="widthFix" :src="item.videoUrl+'?x-oss-process=video/snapshot,t_0,f_jpg'"></image>
</view>
<view v-if="projectId==item.projectId" class="playLogo">播放中</view> <view v-if="projectId==item.projectId" class="playLogo">播放中</view>
<image class="play_btn" src="../../static/image/index/play.png" /> <image class="play_btn" src="../../static/image/index/play.png" />
<text style="position: absolute;right: 8rpx;bottom: 8rpx;color:#fff">13:14</text> <text style="position: absolute;right: 8rpx;bottom: 8rpx;color:#fff">{{item.videoTime}}</text>
</view> </view>
<text :style="{color:projectId==item.projectId?'#FF6E02':'#333'}">{{item.description}}</text> <text :style="{color:projectId==item.projectId?'#FF6E02':'#333'}">{{item.description}}</text>
</view> </view>
@ -45,11 +47,11 @@
</view> </view>
<view style="max-height: 800rpx;overflow-y: scroll;" class="p14lr"> <view style="max-height: 800rpx;overflow-y: scroll;" class="p14lr">
<view class="flex bc-fff mt10" style="border-radius: 16rpx;" v-for="(item,index) of videoList" :key="index" <view class="flex bc-fff mt10" style="border-radius: 16rpx;" v-for="(item,index) of videoList" :key="index"
@tap="toDetail"> @tap="checkVideo(item.projectId)">
<view class="pic relative"> <view class="pic relative" style="overflow: hidden;">
<image class="pic" src="../../static/image/index/jpsp.png"></image> <image class="pic" mode="widthFix" :src="item.videoUrl+'?x-oss-process=video/snapshot,t_0,f_jpg'"></image>
<image class="play_btn_2" src="../../static/image/index/play.png" /> <image class="play_btn_2" src="../../static/image/index/play.png" />
<text style="position: absolute;right: 8rpx;bottom: 8rpx;color:#fff">13:14</text> <text style="position: absolute;right: 8rpx;bottom: 8rpx;color:#fff">{{item.videoTime}}</text>
</view> </view>
<view class="ml10"> <view class="ml10">
<text class="fs16 cor-000 fw600">{{item.description}}</text> <text class="fs16 cor-000 fw600">{{item.description}}</text>
@ -69,6 +71,7 @@
export default { export default {
data() { data() {
return { return {
title:'',
currentIndex:0, currentIndex:0,
videoIndex: 0, videoIndex: 0,
testList: [{ testList: [{
@ -131,34 +134,34 @@
if(op.projectId){ if(op.projectId){
this.projectId=op.projectId this.projectId=op.projectId
} }
if(op.driveType){
this.param.driveType=op.driveType
}
if(op.subject){ if(op.subject){
this.param.subject=op.subject this.param.subject=op.subject
} }
if(op.type){ if(op.type){
this.param.type=op.type this.param.type=op.type
} }
this.getVieoList() if(op.type=='1'){
if(this.param.subject=='2'){
this.title='科二基础项目讲解'
}else{
this.title='科三基础项目讲解'
}
}else{
this.title='基础操作讲解'
}
if(op.videoList){
this.videoList=JSON.parse(op.videoList)
this.currentIndex=this.videoList.findIndex(item=>item.projectId==this.projectId)
}
}, },
methods: { methods: {
getVieoList(){
queryProjectList({
"carTypeId": storage.get('carType') || '1001',
"driveType": this.param.driveType,
"subject": this.param.subject,
"type": this.param.type
}).then(resp=>{
this.videoList=resp.data
this.currentIndex=this.videoList.findIndex(item=>item.projectId==this.projectId)
})
},
checkTest(val) { checkTest(val) {
this.videoIndex = val this.videoIndex = val
}, },
checkVideo(val) { checkVideo(val) {
this.popupShow=false
this.projectId = val this.projectId = val
this.currentIndex=this.videoList.findIndex(item=>item.projectId==this.projectId)
} }
} }
} }

@ -63,12 +63,12 @@
<image class="contain-box" src="../../../static/image/index/jpsp.png"></image> <image class="contain-box" src="../../../static/image/index/jpsp.png"></image>
<image class="play_btn_2" src="../../static/image/index/play.png" /> <image class="play_btn_2" src="../../static/image/index/play.png" />
</view> </view>
<view class="ml15 text-center"> <!-- <view class="ml15 text-center">
<u-button :customStyle="{width:'200rpx',height:'66rpx',borderRadius: '33rpx'}" iconColor="#fff" <u-button :customStyle="{width:'200rpx',height:'66rpx',borderRadius: '33rpx'}" iconColor="#fff"
text="去看视频" color="linear-gradient(90deg, #11DF20 0%, #00B74F 100%)" icon="play-circle"> text="去看视频" color="linear-gradient(90deg, #11DF20 0%, #00B74F 100%)" icon="play-circle">
</u-button> </u-button>
<view class="cor-333 fs15 fw600 mt10">{{subject==1?'一':'四'}}易错试题</view> <view class="cor-333 fs15 fw600 mt10">{{subject==1?'一':'四'}}易错试题</view>
</view> </view> -->
</view> </view>
</view> </view>

Loading…
Cancel
Save