提交 96a4c436 authored 作者: lihuihui's avatar lihuihui

修改文件目录,知识点测试提交

上级 cfbe9bd0
...@@ -49,3 +49,38 @@ export function getAllQuestion(params) { ...@@ -49,3 +49,38 @@ export function getAllQuestion(params) {
export function setMyCache(params) { export function setMyCache(params) {
return httpRequest.post('/api/zy/v2/examination/cache-question', params) return httpRequest.post('/api/zy/v2/examination/cache-question', params)
} }
/**
* 收藏试题
*/
export function addCollection(params) {
return httpRequest.post('/api/zy/v2/examination/add-collection', params)
}
/**
* 取消收藏试题
*/
export function deleteCollection(params) {
return httpRequest.post('/api/zy/v2/examination/delete-my-question', params)
}
/**
* 删除试题
*/
export function deleteQuestion(params) {
return httpRequest.post('/api/zy/v2/examination/delete-my-question', params)
}
/**
* 知识点题获取
*/
export function getCourseQuestion(params) {
return httpRequest.get('/api/zy/v2/examination/course-papers', { params })
}
/**
* 知识点题缓存
*/
export function setCourseCache(params) {
return httpRequest.post('/api/zy/v2/examination/course-papers', params)
}
...@@ -84,6 +84,7 @@ export default { ...@@ -84,6 +84,7 @@ export default {
methods: { methods: {
// 跳详情 // 跳详情
goDetails(i) { goDetails(i) {
window.localStorage.removeItem('answerRecord')
this.$router.push({ this.$router.push({
path: '/my/questions/details', path: '/my/questions/details',
query: { query: {
......
<template> <template>
<div class="my-question-list-item" @click="goDetails"> <div class="my-question-list-item">
<el-checkbox v-model="data.checked"></el-checkbox> <el-checkbox v-model="data.checked"></el-checkbox>
<div class="badge" :class="`questiont-type_${data.question_type}`">{{ questionTypeName }}</div> <div class="badge" :class="`questiont-type_${data.question_type}`">{{ questionTypeName }}</div>
<div class="name" v-html="data.question_content"></div> <div class="name" v-html="data.question_content" @click="goDetails"></div>
<div class="tools"> <div class="tools">
<i class="el-icon-delete" @click="$emit('on-remove', data)"></i> <i class="el-icon-delete" @click="$emit('on-remove', data)"></i>
<i <i
......
<template>
<div>
<div class="tab1">
<!-- <div class="title">能力自测 测试说明</div> -->
<img src="../../assets/images/tab1bg.png" alt="">
<p class="ti">考试时间20分钟</p>
<p class="tx">考试题目共22题,分四部分</p>
<p class="tx">单选题共8题</p>
<p class="tx">多选题共8题</p>
<p class="tx">判断题共5题</p>
<p class="tx">案例题共1题</p>
<p class="ti2">了解自己知识掌握情况</p>
<p class="ti2">成绩报告准确分析定位</p>
<div class="comp">
<div class="btn" @click="abilityExam">开始测试</div>
</div>
</div>
<div class="exam_submit" v-if="isExamPop">
<div class="pop">
<div class="tit">考前摸底</div>
<div class="txt">您上次未做完试题</div>
<div class="btn_box">
<div class="btn" @click="goAbilityExam(1)">重新答题</div>
<div class="btn btn2" @click="goAbilityExam(0)">继续答题</div>
</div>
</div>
</div>
<div class="exam_submit" v-if="isExamPopTo">
<div class="pop">
<div class="tit">考前摸底</div>
<div class="txt">考试还未结束确定退出考试?</div>
<div class="btn_box">
<div class="btn" @click="isExamPopTo = false">退出考试</div>
<div class="btn btn2" @click="goAbilityExam(0)">继续考试</div>
</div>
</div>
</div>
</div>
</template>
<script>
import * as api from '@/api/courseExam.js'
export default {
metaInfo: {
title: '考前摸底'
},
data() {
return {
isExamPop: false,
isExamPopTo: false
}
},
mounted() {
if (window.localStorage.isExamEnd === 'true' || window.localStorage.isExamEnd === true) {
this.init()
}
},
methods: {
async abilityExam() {
const isLogin = await this.$store.dispatch('checkLogin')
if (!isLogin) {
this.goAbilityExam(1)
return false
}
const param = {
type: 1
}
api.getExamStatus(param).then(res => {
if (parseInt(res.status) === 0 || parseInt(res.status) === 3) {
this.isExamPop = true
} else {
this.goAbilityExam(1)
}
})
},
goAbilityExam(n) {
window.localStorage.isExamEnd = true
window.localStorage.examTab = 0
this.$router.push({
path: '/exam/answer',
query: {
type: 1,
is_create: n,
papersUrl: 'zy/v2/examination/examination-papers'
}
})
},
async init() {
const param = {
type: 1
}
const isLogin = await this.$store.dispatch('checkLogin')
if (isLogin) {
api.getExamStatus(param).then(res => {
if (parseInt(res.status) === 0 || parseInt(res.status) === 3) {
this.isExamPopTo = true
}
})
}
}
}
}
</script>
<style lang="scss" scoped>
.tab1{
// padding-top: .2rem;
padding: .8rem .4rem 1rem .4rem;
.txt{
font-size: .26rem;
color: #222;
line-height: .26ren;
}
.comp{
position: fixed;
bottom: .15rem;
left: 50%;
-webkit-transform: translateX(-50%);
padding-bottom: env(safe-area-inset-bottom);
}
.btn{
width:6.7rem;
height:.8rem;
background:#C62245;
border-radius:.12rem;
text-align: center;
line-height: .8rem;
color: #fff;
font-size: .3rem;
}
.title{
font-size:.4rem;
font-weight:bold;
color:rgba(255,103,103,1);
line-height: 100%;
padding-top: .2rem;
text-align: center;
}
img{
width: 5.01rem;
height: 3.98rem;
display: block;
margin: 0.2rem auto 0 auto;
}
p{
line-height: 100%;
font-size: .26rem;
color: #222;
text-align: center;
}
.tx{
margin-top: .2rem;
}
.ti{
font-size: .3rem;
margin: .4rem 0 .2rem 0;
font-weight: bold;
}
.ti2{
font-size: .3rem;
font-weight: bold;
margin-top: .4rem;
}
}
.exam_submit{
position: fixed;
top: 0;
left: 0;
z-index: 999999;
width: 100%;
height: 100%;
background: rgba(0,0,0,0.6);
.pop{
width: 5.9rem;
position: absolute;
top: 50%;
left: 50%;
-webkit-transform: translate(-50%,-50%);
background:rgba(255,255,255,1);
border-radius:.12rem;
padding: 0.4rem 0;
.tit{
font-weight:bold;
color:rgba(34,34,34,1);
font-size:.3rem;
text-align: center;
line-height: 100%;
}
.txt{
color:rgba(34,34,34,1);
font-size:.3rem;
text-align: center;
line-height: 100%;
margin-top: .8rem;
}
.btn_box{
padding:0 0.2rem;
display: flex;
margin-top: .8rem;
.btn{
width:2.6rem;
height:.7rem;
background:#C62245;
border-radius:.12rem;
text-align: center;
line-height: .7rem;
color: #fff;
font-size: .3rem;
}
.btn2{
margin-left: auto;
}
}
}
}
</style>
<template>
<div>
<exam-topic :requestParam="$route.query" @goExamResult="goExamResult"></exam-topic>
</div>
</template>
<script>
export default {
mounted() {
},
methods: {
goExamResult(e) {
this.$router.replace({
path: '/exam/result',
query: e
})
}
},
metaInfo () {
return {
title: '答题',
meta: [
// { vmid: 'description', name: 'description', content: this.description }
]
}
},
beforeDestroy() {
// this.$router.back()
window.localStorage.isBack = true
}
}
</script>
<style lang="scss" scoped>
</style>
<template>
<div>
<exam-end @cardChange="cardChange"></exam-end>
</div>
</template>
<script>
// import { Toast } from 'vant'
export default {
data() {
return {
questionsData: null,
requestData: null
}
},
computed: {
isWeapp() {
return this.$store.state.isWeapp
}
},
metaInfo () {
return {
title: '成绩报告',
meta: [
// { vmid: 'description', name: 'description', content: this.description }
]
}
},
methods: {
cardChange(e) {
const eData = JSON.stringify(e).replace(/:/gi, '=').replace(/,/gi, '&').replace(/({)|(})/gi, '').replace(/"/gi, '')
const path = `/exam/answer?${eData}`
if (this.isWeapp) {
const src = encodeURIComponent(`${window.location.origin}${path}`)
wx.miniProgram.navigateTo({
url: `/pages/web/index?src=${src}`
})
} else {
this.$router.push({ path })
}
// this.$router.push({
// path: '/exam/answer',
// query: e
// })
}
}
}
</script>
<style lang="scss" scoped>
</style>
<template>
<div class="course-tag-wrapper">
<div class="course-tag-hd">
<h1 class="course-title">{{detail.course_name}}</h1>
</div>
<div class="course-tag-bd">
<course-tag :courseId="courseId" :isTest="true" @ready="onReady"></course-tag>
</div>
</div>
</template>
<script>
import CourseTag from '@/pages/course/tag/index.vue'
export default {
components: { CourseTag },
metaInfo: {
title: '按考点练习'
},
data() {
return {
detail: {}
}
},
computed: {
courseId() {
return this.$route.query.id
}
},
methods: {
onReady(response) {
this.detail = response
}
}
}
</script>
<style lang="scss" scoped>
.course-tag-wrapper {
min-height: 100vh;
background-color: #eee;
box-sizing: border-box;
}
.course-tag-hd {
padding: 0.4rem;
background-color: #fff;
}
.course-tag-bd {
padding: 0.4rem;
}
.course-title {
font-size: 0.3rem;
color: #222;
}
</style>
差异被折叠。
差异被折叠。
...@@ -36,12 +36,12 @@ ...@@ -36,12 +36,12 @@
@click="changeIndex('next')" @click="changeIndex('next')"
>下一题</div> >下一题</div>
</div> </div>
<div class="rigth-btn" @click="signHandle" v-if="!$route.query.id"> <div class="rigth-btn" @click="signHandle">
<!-- <div class="sign"> <div class="sign" @click="collectQuestion">
<div class="icon"></div> <div :class="questionParams.question.isCollection ? 'icon active' : 'icon'"></div>
<div class="txt">{{ itemSign ? '取消标记' : '标记' }}</div> <div class="txt">{{ questionParams.question.isCollection ? '已收藏' : '收藏' }}</div>
</div> --> </div>
<div class="end-exam-btn"> <div class="end-exam-btn" v-if="!$route.query.id">
<div class="btn" @click="endExam">交卷</div> <div class="btn" @click="endExam">交卷</div>
</div> </div>
</div> </div>
...@@ -95,6 +95,36 @@ export default { ...@@ -95,6 +95,36 @@ export default {
this.getTopic() this.getTopic()
}, },
methods: { methods: {
// 收藏试题
collectQuestion() {
const data = this.questionParams.question
console.log(data)
data.isCollection
? this.removeCall(data.id, () => {
data.isCollection = false
})
: this.addCall(data.id, () => {
data.isCollection = true
})
},
addCall(id, call) {
api
.addCollection({ question_id: id })
.then(response => {
call(response.list)
})
.finally(() => {
})
},
removeCall(id, call) {
api
.deleteCollection({ type: 2, question_id: id })
.then(response => {
call(response.list)
})
.finally(() => {
})
},
// 标记 // 标记
signHandle() { signHandle() {
this.$refs.signHandle.onSignHandle() this.$refs.signHandle.onSignHandle()
...@@ -200,7 +230,8 @@ export default { ...@@ -200,7 +230,8 @@ export default {
id: cItem.id, id: cItem.id,
options: cItem.question_options, options: cItem.question_options,
question_item_title: type[item.question_type], question_item_title: type[item.question_type],
total_question_count: this.beforeChangeData.questions.total_question_count total_question_count: this.beforeChangeData.questions.total_question_count,
isCollection: cItem.is_collection
} }
if (this.$route.query.id) { if (this.$route.query.id) {
if (this.$route.query.id.length > 5 || this.$route.query.id === 'all' || this.$route.query.id === 'err') { if (this.$route.query.id.length > 5 || this.$route.query.id === 'all' || this.$route.query.id === 'err') {
...@@ -433,8 +464,12 @@ export default { ...@@ -433,8 +464,12 @@ export default {
margin: 0 auto; margin: 0 auto;
width: 24px; width: 24px;
height: 24px; height: 24px;
background: url(@/assets/images/sign.png); background: url(@/assets/images/collection.png);
background-size:100% 100%; background-size:100% 100%;
&.active{
background: url(@/assets/images/collection2.png);
background-size:100% 100%;
}
} }
.txt{ .txt{
font-size: 14px; font-size: 14px;
......
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
</div> </div>
<div class="item"> <div class="item">
<p><b>试卷组卷比例见下表</b></p> <p><b>试卷组卷比例见下表</b></p>
<img src="../../assets/images/exam_table.png" style="max-width: 100%" /> <img src="../../../assets/images/exam_table.png" style="max-width: 100%" />
</div> </div>
</div> </div>
<template #footer> <template #footer>
...@@ -62,7 +62,7 @@ export default { ...@@ -62,7 +62,7 @@ export default {
this.$router.push({ this.$router.push({
path: '/mock/exam', path: '/mock/exam',
query: { query: {
is_create: true is_create: 1
} }
}) })
} }
......
...@@ -32,6 +32,7 @@ export default { ...@@ -32,6 +32,7 @@ export default {
questionParams: { type: Object, default: () => {} } questionParams: { type: Object, default: () => {} }
}, },
mounted() { mounted() {
console.log(this.questionParams.card, '====123')
this.msgCenter.$on('monitoringChanges', this.monitoringChanges) this.msgCenter.$on('monitoringChanges', this.monitoringChanges)
}, },
computed: { computed: {
...@@ -68,7 +69,7 @@ export default { ...@@ -68,7 +69,7 @@ export default {
goQuestion(n) { goQuestion(n) {
this.$emit('cardChangeQuention', n) this.$emit('cardChangeQuention', n)
}, },
changeCardStatus(id) { changeCardStatus(id, n) {
const dataArr1 = this.questionParams.question.rightKey const dataArr1 = this.questionParams.question.rightKey
const dataArr2 = this.questionParams.answerRecord[id] ? this.questionParams.answerRecord[id].answer : [] const dataArr2 = this.questionParams.answerRecord[id] ? this.questionParams.answerRecord[id].answer : []
const findData = this.questionParams.card.find(item => { return item.question_id === id }) const findData = this.questionParams.card.find(item => { return item.question_id === id })
...@@ -86,6 +87,9 @@ export default { ...@@ -86,6 +87,9 @@ export default {
} }
} }
return false return false
},
allIsClass() {
console.log(this.questionParams, '====321')
} }
}, },
watch: { watch: {
......
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
<li <li
:key="index" :key="index"
@click="changeOptions(questionData.question_item_type, questionData.id, item.id)" @click="changeOptions(questionData.question_item_type, questionData.id, item.id)"
:class="isClass(questionData.id, item.id)" :class="$route.query.type == 3 ? allIsClass(item.id) : isClass(questionData.id, item.id)"
> >
<div class="icon"></div> <div class="icon"></div>
<div class="txt">{{A_Z()[index]}}. {{item.option}}</div> <div class="txt">{{A_Z()[index]}}. {{item.option}}</div>
...@@ -57,32 +57,24 @@ ...@@ -57,32 +57,24 @@
</div> </div>
</div> </div>
<ul class="topics" :style="{height: contentHeight - 60 + 'px'}"> <ul class="topics" :style="{height: contentHeight - 60 + 'px'}">
<!-- <template v-for="item in questionData.list"> --> <li>
<!-- <template v-if="questionData.group_id === item[0].group_id"> --> <div class="title">
<!-- <template v-for="(listItem, index) in item"> --> <div class="num">{{ questionData.q_order }}.</div><div class="des" v-html="questionData.content"></div>
<li> </div>
<div class="title"> <ul :class="questionData.answer_count > 1 ? 'check-option' : 'radio-option'"><!-- radio-option check-option -->
<div class="num">{{ questionData.q_order }}.</div><div class="des" v-html="questionData.content"></div> <template v-for="(opt, oIndex) in questionData.options">
</div> <li
<ul :class="questionData.answer_count > 1 ? 'check-option' : 'radio-option'"><!-- radio-option check-option --> :id="opt.id"
<!-- <template v-if="listItem.id === questionData.id"> --> :key="'c' + oIndex"
<template v-for="(opt, oIndex) in questionData.options"> @click="changeOptions(questionData.answer_count > 1 ? 2 : 1, questionData.id, opt.id)"
<li :class="isClass(questionData.id, opt.id)"
:id="opt.id" >
:key="'c' + oIndex" <div class="icon"></div>
@click="changeOptions(questionData.answer_count > 1 ? 2 : 1, questionData.id, opt.id)" <div class="txt">{{A_Z()[oIndex]}}. {{opt.option}}</div>
:class="isClass(questionData.id, opt.id)"
>
<div class="icon"></div>
<div class="txt">{{A_Z()[oIndex]}}. {{opt.option}}</div>
</li>
</template>
<!-- </template> -->
</ul>
</li> </li>
<!-- </template> --> </template>
<!-- </template> --> </ul>
<!-- </template> --> </li>
</ul> </ul>
</div> </div>
</template> </template>
...@@ -105,6 +97,7 @@ export default { ...@@ -105,6 +97,7 @@ export default {
this.questionData = this.questionParams.question this.questionData = this.questionParams.question
}, },
mounted() { mounted() {
this.isChangeAnswer()
}, },
methods: { methods: {
answerConfirm() { answerConfirm() {
...@@ -112,8 +105,6 @@ export default { ...@@ -112,8 +105,6 @@ export default {
const value = Object.values(this.currentCheck) const value = Object.values(this.currentCheck)
this.questionParams.answerRecord[key[0]] = value[0] this.questionParams.answerRecord[key[0]] = value[0]
this.isChangeAnswer() this.isChangeAnswer()
// console.log(this.questionParams.answerRecord)
// console.log(key, value)
}, },
// 自己选择的答案 // 自己选择的答案
myAnswer() { myAnswer() {
...@@ -156,10 +147,14 @@ export default { ...@@ -156,10 +147,14 @@ export default {
this.$forceUpdate() this.$forceUpdate()
}, },
isChangeAnswer() { isChangeAnswer() {
this.questionParams.answerRecord[this.questionData.id] if (parseInt(this.$route.query.type) === 3) {
? this.isAnswer = false this.isAnswer = false
: this.isAnswer = true } else {
this.msgCenter.$emit('monitoringChanges', this.questionData.id) this.questionParams.answerRecord[this.questionData.id]
? this.isAnswer = false
: this.isAnswer = true
this.msgCenter.$emit('monitoringChanges', this.questionData.id)
}
}, },
signCallback() { signCallback() {
const pId = this.questionData.question_item_id const pId = this.questionData.question_item_id
...@@ -199,6 +194,12 @@ export default { ...@@ -199,6 +194,12 @@ export default {
} }
return active return active
} }
},
allIsClass() {
return (oId) => {
const findData = this.questionParams.question.user_answer.find(id => { return id === oId })
return findData ? 'active' : ''
}
} }
}, },
watch: { watch: {
......
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
<div class="foot" id="foot-h"> <div class="foot" id="foot-h">
<div class="exam-btn"> <div class="exam-btn">
<div class="confirm" <div class="confirm"
v-if="this.questionParams.question.answer_count > 1" v-if="this.questionParams.question.answer_count > 1 && $route.query.type != 3"
@click="confirmBtn" @click="confirmBtn"
> >
确认答案 确认答案
...@@ -41,11 +41,12 @@ ...@@ -41,11 +41,12 @@
>下一题</div> >下一题</div>
</div> </div>
<div class="rigth-btn"> <div class="rigth-btn">
<!-- <div class="sign"> <div class="sign" @click="collectQuestion" v-if="$route.query.type != 2">
<div class="icon"></div> <div :class="questionParams.question.is_collection ? 'icon active' : 'icon'"></div>
<div class="txt">{{ itemSign ? '取消标记' : '标记' }}</div> <div class="txt">{{ questionParams.question.is_collection ? '已收藏' : '收藏' }}</div>
</div> --> </div>
<div class="end-exam-btn"> <div class="del-btn" @click="deleteQuestion">删除</div>
<div class="end-exam-btn" v-if="$route.query.type != 3">
<div class="btn" @click="clearQuestion">清空记录,重新答题</div> <div class="btn" @click="clearQuestion">清空记录,重新答题</div>
</div> </div>
</div> </div>
...@@ -55,8 +56,8 @@ ...@@ -55,8 +56,8 @@
</template> </template>
<script> <script>
import * as api from '@/api/exam.js' import * as api from '@/api/exam.js'
import answerCard from '@/components/myQuestion/answerCard.vue' import answerCard from './components/answerCard.vue'
import question from '@/components/myQuestion/question.vue' import question from './components/question.vue'
export default { export default {
components: { components: {
question, question,
...@@ -89,10 +90,34 @@ export default { ...@@ -89,10 +90,34 @@ export default {
this.initData() this.initData()
}, },
methods: { methods: {
// 删除试题
deleteQuestion() {
this.$loading({
lock: true,
text: 'Loading',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
})
const param = {
question_id: this.questionParams.question.id,
type: this.$route.query.type
}
api
.deleteQuestion(param)
.then(response => {
this.$router.go(0)
})
.finally(() => {
})
},
// 初始化 // 初始化
initData() { initData() {
this.getCardAll() this.getCardAll()
this.goAppointQuestion(this.$route.query.index - 1) this.goAppointQuestion(this.$route.query.index - 1)
this.questionParams.questionIndex = 0
window.localStorage.answerRecord
? this.questionParams.answerRecord = JSON.parse(window.localStorage.answerRecord)
: this.questionParams.answerRecord = {}
}, },
confirmBtn() { confirmBtn() {
this.$refs.confirmBtn.answerConfirm() this.$refs.confirmBtn.answerConfirm()
...@@ -100,6 +125,36 @@ export default { ...@@ -100,6 +125,36 @@ export default {
getDom(id) { getDom(id) {
return document.getElementById(id) return document.getElementById(id)
}, },
// 收藏试题
collectQuestion() {
const data = this.questionParams.question
console.log(data)
data.is_collection
? this.removeCall(data.id, () => {
data.is_collection = false
})
: this.addCall(data.id, () => {
data.is_collection = true
})
},
addCall(id, call) {
api
.addCollection({ question_id: id })
.then(response => {
call(response.list)
})
.finally(() => {
})
},
removeCall(id, call) {
api
.deleteCollection({ question_id: id })
.then(response => {
call(response.list)
})
.finally(() => {
})
},
// 改变数据 // 改变数据
setData(list) { setData(list) {
return list.map(list => { return list.map(list => {
...@@ -110,9 +165,9 @@ export default { ...@@ -110,9 +165,9 @@ export default {
6: '判断题' 6: '判断题'
} }
const typeTotal = { const typeTotal = {
0: 'total', 3: 'total',
1: 'error_total', 1: 'error_total',
2: '' 2: 'collection_total'
} }
const data = { const data = {
q_order: list.num, q_order: list.num,
...@@ -121,7 +176,7 @@ export default { ...@@ -121,7 +176,7 @@ export default {
id: list.question_id, id: list.question_id,
options: list.question_options, options: list.question_options,
question_item_title: type[parseInt(list.question_type)], question_item_title: type[parseInt(list.question_type)],
total_question_count: this.questionData[typeTotal[this.$route.query.type]], total_question_count: this.questionData[typeTotal[parseInt(this.$route.query.type)]],
question_analysis: list.question_analysis, question_analysis: list.question_analysis,
user_answer: list.user_answer, user_answer: list.user_answer,
is_collection: list.is_collection, is_collection: list.is_collection,
...@@ -158,17 +213,27 @@ export default { ...@@ -158,17 +213,27 @@ export default {
// 获取答题卡所有题 // 获取答题卡所有题
getCardAll() { getCardAll() {
const param = { const param = {
type: this.$route.query.type, type: parseInt(this.$route.query.type) === 3 ? 0 : this.$route.query.type,
question_type: this.$route.query.qType question_type: this.$route.query.qType
} }
api api
.getAllQuestion(param) .getAllQuestion(param)
.then(response => { .then(response => {
this.questionParams.card = response.list if (response.list[0].question) {
this.questionParams.card = this.setCardData(response.list)
} else {
this.questionParams.card = response.list
}
}) })
.finally(() => { .finally(() => {
}) })
}, },
setCardData(list) {
return list.map(item => {
item.question = JSON.parse(item.question)
return item
})
},
// ABC // ABC
A_Z() { A_Z() {
const result = [] const result = []
...@@ -219,9 +284,11 @@ export default { ...@@ -219,9 +284,11 @@ export default {
!isData && (this.supplyRequest()) !isData && (this.supplyRequest())
} }
} else { } else {
this.questionParams.questionIndex++ if (parseInt(this.questionParams.questionIndex + 1) !== parseInt(this.questionParams.question.total_question_count)) {
const isData = this.questionData.list.find(i => { return i.q_order === this.questionParams.questionIndex + 2 }) this.questionParams.questionIndex++
!isData && (this.supplyRequest(1)) const isData = this.questionData.list.find(i => { return i.q_order === this.questionParams.questionIndex + 2 })
!isData && (this.supplyRequest(1))
}
} }
}, },
supplyRequest(n) { supplyRequest(n) {
...@@ -256,6 +323,7 @@ export default { ...@@ -256,6 +323,7 @@ export default {
question_type: this.$route.query.qType, question_type: this.$route.query.qType,
answer: JSON.stringify(this.questionParams.answerRecord) answer: JSON.stringify(this.questionParams.answerRecord)
} }
window.localStorage.answerRecord = JSON.stringify(this.questionParams.answerRecord)
this.chcheReq(param, () => {}) this.chcheReq(param, () => {})
}, },
// 清除所有答案 重新答题 // 清除所有答案 重新答题
...@@ -267,6 +335,7 @@ export default { ...@@ -267,6 +335,7 @@ export default {
} }
this.chcheReq(param, () => { this.chcheReq(param, () => {
this.questionParams.questionIndex = 0 this.questionParams.questionIndex = 0
window.localStorage.removeItem('answerRecord')
this.initData() this.initData()
}) })
}, },
...@@ -289,7 +358,8 @@ export default { ...@@ -289,7 +358,8 @@ export default {
// 监听题的变化 // 监听题的变化
changeQuestionIndex(newV, oldV) { changeQuestionIndex(newV, oldV) {
this.changeData() this.changeData()
this.handlePapers() parseInt(this.$route.query.type) !== 3 && (this.handlePapers())
console.log(this.questionParams.question)
} }
} }
} }
...@@ -408,6 +478,18 @@ export default { ...@@ -408,6 +478,18 @@ export default {
.rigth-btn{ .rigth-btn{
display: flex; display: flex;
margin-left: auto; margin-left: auto;
.del-btn{
width: 100px;
height: 40px;
border-radius: 4px;
border: 1px solid #CCCCCC;
line-height: 40px;
font-size: 14px;
font-weight: bold;
color: #999999;
text-align: center;
margin-right: 30px;
}
.end-exam-btn{ .end-exam-btn{
width: 260px; width: 260px;
display: flex; display: flex;
...@@ -432,8 +514,12 @@ export default { ...@@ -432,8 +514,12 @@ export default {
margin: 0 auto; margin: 0 auto;
width: 24px; width: 24px;
height: 24px; height: 24px;
background: url(@/assets/images/sign.png); background: url(@/assets/images/collection.png);
background-size:100% 100%; background-size:100% 100%;
&.active{
background: url(@/assets/images/collection2.png);
background-size:100% 100%;
}
} }
.txt{ .txt{
font-size: 14px; font-size: 14px;
......
...@@ -36,12 +36,12 @@ ...@@ -36,12 +36,12 @@
@click="changeIndex('next')" @click="changeIndex('next')"
>下一题</div> >下一题</div>
</div> </div>
<div class="rigth-btn" @click="signHandle" v-if="!$route.query.id"> <div class="rigth-btn" @click="signHandle">
<!-- <div class="sign"> <div class="sign" @click="collectQuestion">
<div class="icon"></div> <div :class="questionParams.question.isCollection ? 'icon active' : 'icon'"></div>
<div class="txt">{{ itemSign ? '取消标记' : '标记' }}</div> <div class="txt">{{ questionParams.question.isCollection ? '已收藏' : '收藏' }}</div>
</div> --> </div>
<div class="end-exam-btn"> <div class="end-exam-btn" v-if="!$route.query.id">
<div class="btn" @click="endExam">交卷</div> <div class="btn" @click="endExam">交卷</div>
</div> </div>
</div> </div>
...@@ -95,6 +95,36 @@ export default { ...@@ -95,6 +95,36 @@ export default {
this.getTopic() this.getTopic()
}, },
methods: { methods: {
// 收藏试题
collectQuestion() {
const data = this.questionParams.question
console.log(data)
data.isCollection
? this.removeCall(data.id, () => {
data.isCollection = false
})
: this.addCall(data.id, () => {
data.isCollection = true
})
},
addCall(id, call) {
api
.addCollection({ question_id: id })
.then(response => {
call(response.list)
})
.finally(() => {
})
},
removeCall(id, call) {
api
.deleteCollection({ type: 2, question_id: id })
.then(response => {
call(response.list)
})
.finally(() => {
})
},
// 标记 // 标记
signHandle() { signHandle() {
this.$refs.signHandle.onSignHandle() this.$refs.signHandle.onSignHandle()
...@@ -205,7 +235,8 @@ export default { ...@@ -205,7 +235,8 @@ export default {
id: cItem.id, id: cItem.id,
options: cItem.question_options, options: cItem.question_options,
question_item_title: type[item.question_type], question_item_title: type[item.question_type],
total_question_count: this.beforeChangeData.questions.total_question_count total_question_count: this.beforeChangeData.questions.total_question_count,
isCollection: cItem.isCollection
} }
if (this.$route.query.id) { if (this.$route.query.id) {
if (this.$route.query.id.length > 5 || this.$route.query.id === 'all' || this.$route.query.id === 'err') { if (this.$route.query.id.length > 5 || this.$route.query.id === 'all' || this.$route.query.id === 'err') {
...@@ -438,8 +469,12 @@ export default { ...@@ -438,8 +469,12 @@ export default {
margin: 0 auto; margin: 0 auto;
width: 24px; width: 24px;
height: 24px; height: 24px;
background: url(@/assets/images/sign.png); background: url(@/assets/images/collection.png);
background-size:100% 100%; background-size:100% 100%;
&.active{
background: url(@/assets/images/collection2.png);
background-size:100% 100%;
}
} }
.txt{ .txt{
font-size: 14px; font-size: 14px;
......
...@@ -30,22 +30,22 @@ const examAnswer = [ ...@@ -30,22 +30,22 @@ const examAnswer = [
/* 考前摸底 */ /* 考前摸底 */
{ {
path: '/testExam', path: '/testExam',
component: () => import(/* webpackChunkName: "exam" */ '@/pages/testExam') component: () => import(/* webpackChunkName: "exam" */ '@/pages/exam/testExam/index')
}, },
/* 考前摸底结果页 */ /* 考前摸底结果页 */
{ {
path: '/testExam/result', path: '/testExam/result',
component: () => import(/* webpackChunkName: "exam" */ '@/pages/testExam/exam/result') component: () => import(/* webpackChunkName: "exam" */ '@/pages/exam/testExam/exam/result')
}, },
/* 真题实战 */ /* 真题实战 */
{ {
path: '/mock', path: '/mock',
component: () => import(/* webpackChunkName: "exam" */ '@/pages/mockExam') component: () => import(/* webpackChunkName: "exam" */ '@/pages/exam/mockExam/index')
}, },
/* 真题实战结果页 */ /* 真题实战结果页 */
{ {
path: '/mock/result', path: '/mock/result',
component: () => import(/* webpackChunkName: "exam" */ '@/pages/mockExam/exam/result') component: () => import(/* webpackChunkName: "exam" */ '@/pages/exam/mockExam/exam/result')
} }
] ]
...@@ -114,17 +114,22 @@ export default [ ...@@ -114,17 +114,22 @@ export default [
/* 考前摸底考试 */ /* 考前摸底考试 */
{ {
path: '/testExam/exam', path: '/testExam/exam',
component: () => import(/* webpackChunkName: "course-learn" */ '@/pages/testExam/exam/index') component: () => import(/* webpackChunkName: "course-learn" */ '@/pages/exam/testExam/exam/index')
}, },
/* 模拟考试 */ /* 模拟考试 */
{ {
path: '/mock/exam', path: '/mock/exam',
component: () => import(/* webpackChunkName: "course-learn" */ '@/pages/mockExam/exam/index') component: () => import(/* webpackChunkName: "course-learn" */ '@/pages/exam/mockExam/exam/index')
}, },
/* 错题收藏全部列表详情 */ /* 错题收藏全部列表详情 */
{ {
path: '/my/questions/details', path: '/my/questions/details',
component: () => import(/* webpackChunkName: "course-learn" */ '@/pages/my/questions/questionDetails') component: () => import(/* webpackChunkName: "course-learn" */ '@/pages/exam/myExam/questionDetails')
},
/* 知识点练习 */
{
path: '/course/exam/examSite',
component: () => import(/* webpackChunkName: "course-learn" */ '@/pages/exam/courseExam/examSite/index')
}, },
...viewerRoutes ...viewerRoutes
] ]
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论