Merge pull request '提交' (#22) from dev-hxf into master

Reviewed-on: #22
pull/23/head^2
huxiaofeng666 1 year ago
commit 0c6182e6f5
  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
});
}
//
//获取专项题目数量
export function querySpecialNum(data) {
return request({
url: 'driver-api/tdQuestion/querySpecialNum',
method: 'POST',
data,
noToken:true
});
}

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

@ -1,11 +1,13 @@
<template>
<view>
<view class="box-nav">
<image style="width: 100%;" src="../../../static/image/index/index_bg.jpg"></image>
<view>
<view class="box-nav">
<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">
<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 class="p14lr" style="margin-top: -20px;">
<view class="video_box">
<view class="flex ai-c jc-sb mt5">
@ -15,15 +17,24 @@
<u-icon name="list" color="#05C341" size="18"></u-icon>
</view>
</view>
<view class="flex ai-c jc-fa mt15" style="flex-wrap: wrap;">
<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>
</view>
<view @tap="toVideo">
<view class="wp100 relative" style="height: 362rpx;border-radius: 16rpx;">
<image style="width: 100%;height: 362rpx;border-radius: 16rpx;" id="myVideo" src="../../../static/image/index/jpsp.png"></image>
<image class="play_btn_2" src="../../static/image/index/play.png" />
</view>
<view class="skill-sequence-panel-content-wrapper">
<scroll-view class="skill-sequence-panel-content" scroll-x :scroll-into-view="intoindex">
<view class="skill-sequence-skill-wrapper tab_iem m15tb" :class="videoIndex===index?'checked_tab':''"
v-for="(item,index) of operateList" :key="index" :id='"text"+index' @tap="checkVideo(index)">
{{item.description}}
</view>
</scroll-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 class="video_box mt10">
<view class="flex ai-c jc-sb">
@ -33,19 +44,20 @@
<u-icon color="#666" name="arrow-right" size="18"></u-icon>
</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="pic relative">
<image class="pic" src="../../static/image/index/index_bg.jpg"></image>
<image class="play_btn_3" src="../../static/image/index/play.png" />
</view>
<view class="ml10">
<text class="fs16 cor-000 fw600">上车下车的方法</text>
<view class="fs14 mt5 cor-666">上车下车的方法</view>
</view>
<view class="flex p14lr p20tb bc-fff mt10" style="border-bottom: 1rpx solid #DDDCDC;"
v-for="(item,index) of videoList" :key="index" @click="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_3" src="../../static/image/index/play.png" />
</view>
<view class="ml10">
<text class="fs16 cor-000 fw600">{{baseList[0]?.description}}</text>
<view class="fs14 mt5 cor-666">{{item.description}}</view>
</view>
</view>
</view>
</view>
</view>
</view>
</template>
<script>
@ -54,125 +66,198 @@
queryProjectList
} from '@/jtools/api/question';
import storage from '@/jtools/storage';
export default {
name: "Subject2",
props:{
subject:{
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);
})
export default {
name: "Subject2",
props: {
subject: {
type: [String, Number]
}
},
toVideo(){
uni.navigateTo({
url:"/pages/questionBank/videoDetail?driveType="+this.diverTypeList[this.diverTypeIndex].configItemCode+"&subject="+this.subject+"&projectId="+this.projectId+"&type=1"
})
data() {
return {
intoindex: '',
diverTypeIndex: 0,
diverTypeList: [],
videoIndex: 0,
projectId: undefined,
operateList: [],
baseList: [],
videoList: []
}
},
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
})
async mounted() {
await this.getDiverType()
},
getDiverType(){
const carTypeId=storage.get('carType') || '1001'
querySysConfigList(carTypeId,'DriveType').then(resp=>{
if(resp.code==='0000'){
this.diverTypeList=resp.data
methods: {
onChange(e) {
this.videoIndex = e.detail.current
this.$nextTick(() => {
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.getOperateList()
}
})
},
changeDiverType(){
this.diverTypeIndex=this.diverTypeIndex==0?1:0
changeDiverType() {
this.diverTypeIndex = this.diverTypeIndex == 0 ? 1 : 0
this.videoIndex = 0
this.getVideoList()
},
checkVideo(val){
this.projectId=this.operateList[val]?.projectId
this.videoIndex=val
},
toDetail(){
uni.navigateTo({
url:"/pages/questionBank/baseOperate"
})
checkVideo(val) {
this.projectId = this.operateList[val]?.projectId
this.videoIndex = val
},
toDetail() {
uni.navigateTo({
url: "/pages/questionBank/baseOperate?subject=" + this.subject
})
}
}
}
}
</script>
<style scoped>
.box-nav{
width: 100%;
position: relative;
}
.center-box{
position: absolute;
width: 100%;
top: 170rpx;
padding: 0 28rpx;
}
.video_box{
width: 100%;
background: #FFFFFF;
border-radius: 16rpx;
padding: 14px;
}
.tab_iem{
padding: 0 5px;
height: 56rpx;
line-height: 56rpx;
text-align: center;
background: #F5F5F5;
border-radius: 10rpx;
color:#333
.box-nav {
width: 100%;
position: relative;
}
.center-box {
position: absolute;
width: 100%;
top: 170rpx;
padding: 0 28rpx;
}
.video_box {
width: 100%;
background: #FFFFFF;
border-radius: 16rpx;
padding: 14px;
}
.tab_iem {
padding: 0 5px;
height: 56rpx;
line-height: 56rpx;
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>

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

@ -8,11 +8,15 @@
<!-- <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> -->
<view class="flex p14 bc-fff mt10" style="border-radius: 16rpx;" v-for="(item,index) of videoList" :key="index" @tap="toDetail">
<image class="pic" src="../../static/image/index/index_bg.png"></image>
<view class="flex p14lr p20tb bc-fff mt10" style="border-bottom: 1rpx solid #DDDCDC;;"
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">
<text class="fs16 cor-000 fw600">上车下车的方法</text>
<view class="fs14 mt5 cor-666">上车下车的方法</view>
<text class="fs16 cor-000 fw600">{{allVideoList[0]?.description}}</text>
<view class="fs14 mt5 cor-666">{{item.description}}</view>
</view>
</view>
</view>
@ -20,25 +24,22 @@
</template>
<script>
import {
querySysConfigList,
queryProjectList
} from '@/jtools/api/question';
import storage from '@/jtools/storage';
export default {
data(){
return{
subject:'1',
tCar:0,
categoryList:[{
name:'手动挡C1'
},{
name:'自动挡C2'
}],
carTypeList:[{
label:'捷达',
value:0
},{
label:'新桑塔纳',
value:1
},{
label:'爱丽舍',
value:2
}],
allVideoList:[],
videoList:[{
label:"111"
},{
@ -50,12 +51,69 @@
}]
}
},
onLoad(op){
if(op.subject){
this.subject=op.subject
this.getDiverType()
}
},
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){
this.tCar=val
},
changeCategory(val){
this.tCar=val.index
this.getOperateList()
},
toDetail(){
uni.navigateTo({
@ -93,4 +151,11 @@
background: #00B74F;
border-radius: 8rpx;
}
.play_btn_2 {
width: 65rpx;
height: 65rpx;
position: absolute;
left: 117.5rpx;
top: 52rpx
}
</style>

@ -1,7 +1,7 @@
<template>
<view class="content">
<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>
</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 style="width: 220rpx;">
<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>
<text>交卷</text>
</view>
@ -147,8 +147,14 @@
</view>
<template #confirmButton>
<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>
<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 v-if="isShowAll">
<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>
</template>
</u-modal>
@ -157,7 +163,7 @@
<view class="wp100 flex jc-sb p14 bc-fff">
<view style="width: 220rpx;">
<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>
<text>交卷</text>
</view>
@ -263,6 +269,7 @@ export default {
},
data() {
return {
originArray:'',
showBestAnswer:false,
nowPrice:68,
showVip:false,
@ -305,6 +312,11 @@ export default {
},
methods: {
...mapActions(useQuestionStore,['getCurrentIndex']),
toLeave(){
uni.switchTab({
url:'/pages/index/index'
})
},
isShowBest(val){
this.showBestAnswer=val
},
@ -414,8 +426,10 @@ export default {
})
},
submitPaper(){
this.$refs.countDown_1.pause();
this.$refs.countDown_2.pause();
if(this.isShowAll){
this.$refs.countDown_1.pause();
this.$refs.countDown_2.pause();
}
this.$refs.countDown_3.pause();
this.$emit('update:isSubmit',true)
},
@ -581,6 +595,7 @@ export default {
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'){
const arr1=this.questionList[this.topicIndex].clickAnswer.split('')
const arr2=this.questionList[this.topicIndex].trueAnswer.split('')
@ -644,19 +659,24 @@ export default {
this.$emit('changeTab',index)
},
getQuestionList(val) {
const arr = JSON.parse(val)
this.questionList=[]
arr.forEach(item=>{
let isCollect=false
if(this.collectList.includes(item.questionId)){
isCollect=true
}
this.questionList.push({
isChoose:false,
isCollect:isCollect,
...item
if(val&&val.length){
const arr = JSON.parse(val)
this.questionList=[]
arr.forEach(item=>{
let isCollect=false
if(this.collectList.includes(item.questionId)){
isCollect=true
}
this.questionList.push({
isChoose:false,
isCollect:isCollect,
...item
})
})
})
}else{
this.questionList=JSON.parse(this.originArray)
}
if(this.navTitle==='顺序答题'){
this.pickerTopic(this[`currentIndex_subject${this.subject}`])
}else{

@ -46,6 +46,7 @@
import neverWriteIcon from "../../static/image/practice/neverWrite_icon.png"
import {
querySysConfigList,
querySpecialNum
} from '@/jtools/api/question';
import storage from '@/jtools/storage';
export default {
@ -94,8 +95,90 @@
this.subject=op.subject
}
this.getExamPoint()
this.getQuestionNum()
},
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(){
const carTypeId=storage.get('carType') || '1001'
const examKey = this.subject=='1'?'ExamKeysOfSubjectOne':'ExamKeysOfSubjectFour'
@ -106,13 +189,31 @@
})
},
toAnswer(title,isError,isNew) {
uni.navigateTo({
url:"/pages/questionBank/questionBank?navTitle="+title+"&isError="+isError+"&isNew="+isNew
})
if(title=='单选题'){
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){
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(){

@ -2,12 +2,17 @@
<view>
<!-- <u-navbar title="模拟考试" @rightClick="rightClick" :autoBack="true">
</u-navbar> -->
<j-navbar :isDefineBack="true" @toBack="toBack">模拟考试</j-navbar>
<Question ref="question" :tabsList="tabsList" v-model:isSubmit="isSubmit" type="exam" :subject="subject" navTitle="模拟考试" />
<j-navbar :isDefineBack="true" @toBack="toBack">{{title}}</j-navbar>
<Question ref="question" :tabsList="tabsList" v-model:isSubmit="isSubmit" :type="type" :isShowAll="isShowAll" :subject="subject" :navTitle="title" @changeTab="changeTab" />
</view>
</template>
<script>
import {
mapState,
mapActions
} from 'pinia' //
import useUserStore from '@/jtools/store/user'
import {
getTestQuestion
} from '@/jtools/api/question';
@ -19,6 +24,9 @@
},
data() {
return {
type:'',
isShowAll:true,
title:"模拟考试",
subject:1,
isSubmit:false,
tabsList:[{
@ -31,23 +39,50 @@
}
},
onLoad(op) {
if(op.title){
this.title=op.title
}
if(op.subject){
this.subject=op.subject
const param={}
if(op.isExam1){
param.isExam1=op.isExam1
}
getTestQuestion({
carTypeId: storage.get('carType') || '1001',
subject: this.subject
}).then(resp=>{
subject: this.subject,
...param
}).then(async (resp)=>{
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: {
...mapState(useUserStore, ["vipOnList"])
},
methods: {
...mapActions(useUserStore, ['searchUserVip']),
toBack(){
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) {
this.navTitle = op.navTitle
const param = {}
if (this.navTitle === '顺序答题' || this.navTitle === '精简500题') {
if (this.navTitle === '顺序答题') {
if(this.subject=='1'){
this.questionArr = [...this.orderQuestion_subject1]
}else if(this.subject=='4'){
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))
} else {
if (this.navTitle === '错题本') {
@ -92,9 +78,34 @@
if(op.isNew&&op.isNew=='1'){
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') {
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))
}
})
@ -120,7 +131,7 @@
this.$refs.question.getQuestionList(JSON.stringify(list))
} else {
this.$refs.question.isShowBest(false)
this.$refs.question.getQuestionList(JSON.stringify(this.questionArr))
this.$refs.question.getQuestionList()
}
},
rightClick() {

@ -1,7 +1,7 @@
<template>
<view>
<sunny-video style="width: 100%" videoHeight="422rpx" ref="sunny-video" title="测试视频"
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" />
<sunny-video style="width: 100%" videoHeight="422rpx" ref="sunny-video"
:src="videoList[currentIndex].videoUrl" />
<view class="p14tb bc-fff">
<view class="skill-sequence-panel-content-wrapper pr14" v-if="videoType=='test'">
<scroll-view class="skill-sequence-panel-content" scroll-x>
@ -10,7 +10,7 @@
</scroll-view>
</view>
<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'">
<text class="fs14 cor-666">更多</text>
<u-icon color="#666" name="arrow-right" size="18"></u-icon>
@ -20,17 +20,19 @@
<view>
</view>
</view>
<view class="bc-fff pl14">
<view class="bc-fff pl14 pb10">
<view class="skill-sequence-panel-content-wrapper">
<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"
@click="checkVideo(item.projectId)">
@tap="checkVideo(item.projectId)">
<view>
<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>
<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>
<text :style="{color:projectId==item.projectId?'#FF6E02':'#333'}">{{item.description}}</text>
</view>
@ -45,11 +47,11 @@
</view>
<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"
@tap="toDetail">
<view class="pic relative">
<image class="pic" src="../../static/image/index/jpsp.png"></image>
@tap="checkVideo(item.projectId)">
<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" />
<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 class="ml10">
<text class="fs16 cor-000 fw600">{{item.description}}</text>
@ -69,6 +71,7 @@
export default {
data() {
return {
title:'',
currentIndex:0,
videoIndex: 0,
testList: [{
@ -131,34 +134,34 @@
if(op.projectId){
this.projectId=op.projectId
}
if(op.driveType){
this.param.driveType=op.driveType
}
if(op.subject){
this.param.subject=op.subject
}
if(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: {
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) {
this.videoIndex = val
},
checkVideo(val) {
this.popupShow=false
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="play_btn_2" src="../../static/image/index/play.png" />
</view>
<view class="ml15 text-center">
<!-- <view class="ml15 text-center">
<u-button :customStyle="{width:'200rpx',height:'66rpx',borderRadius: '33rpx'}" iconColor="#fff"
text="去看视频" color="linear-gradient(90deg, #11DF20 0%, #00B74F 100%)" icon="play-circle">
</u-button>
<view class="cor-333 fs15 fw600 mt10">{{subject==1?'一':'四'}}易错试题</view>
</view>
</view> -->
</view>
</view>

Loading…
Cancel
Save