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

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

上级 cfbe9bd0
......@@ -49,3 +49,38 @@ export function getAllQuestion(params) {
export function setMyCache(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 {
methods: {
// 跳详情
goDetails(i) {
window.localStorage.removeItem('answerRecord')
this.$router.push({
path: '/my/questions/details',
query: {
......
<template>
<div class="my-question-list-item" @click="goDetails">
<div class="my-question-list-item">
<el-checkbox v-model="data.checked"></el-checkbox>
<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">
<i class="el-icon-delete" @click="$emit('on-remove', data)"></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 @@
@click="changeIndex('next')"
>下一题</div>
</div>
<div class="rigth-btn" @click="signHandle" v-if="!$route.query.id">
<!-- <div class="sign">
<div class="icon"></div>
<div class="txt">{{ itemSign ? '取消标记' : '标记' }}</div>
</div> -->
<div class="end-exam-btn">
<div class="rigth-btn" @click="signHandle">
<div class="sign" @click="collectQuestion">
<div :class="questionParams.question.isCollection ? 'icon active' : 'icon'"></div>
<div class="txt">{{ questionParams.question.isCollection ? '已收藏' : '收藏' }}</div>
</div>
<div class="end-exam-btn" v-if="!$route.query.id">
<div class="btn" @click="endExam">交卷</div>
</div>
</div>
......@@ -95,6 +95,36 @@ export default {
this.getTopic()
},
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() {
this.$refs.signHandle.onSignHandle()
......@@ -200,7 +230,8 @@ export default {
id: cItem.id,
options: cItem.question_options,
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.length > 5 || this.$route.query.id === 'all' || this.$route.query.id === 'err') {
......@@ -433,9 +464,13 @@ export default {
margin: 0 auto;
width: 24px;
height: 24px;
background: url(@/assets/images/sign.png);
background: url(@/assets/images/collection.png);
background-size:100% 100%;
&.active{
background: url(@/assets/images/collection2.png);
background-size:100% 100%;
}
}
.txt{
font-size: 14px;
color: #CCCCCC;
......
......@@ -26,7 +26,7 @@
</div>
<div class="item">
<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>
<template #footer>
......@@ -62,7 +62,7 @@ export default {
this.$router.push({
path: '/mock/exam',
query: {
is_create: true
is_create: 1
}
})
}
......
......@@ -32,6 +32,7 @@ export default {
questionParams: { type: Object, default: () => {} }
},
mounted() {
console.log(this.questionParams.card, '====123')
this.msgCenter.$on('monitoringChanges', this.monitoringChanges)
},
computed: {
......@@ -68,7 +69,7 @@ export default {
goQuestion(n) {
this.$emit('cardChangeQuention', n)
},
changeCardStatus(id) {
changeCardStatus(id, n) {
const dataArr1 = this.questionParams.question.rightKey
const dataArr2 = this.questionParams.answerRecord[id] ? this.questionParams.answerRecord[id].answer : []
const findData = this.questionParams.card.find(item => { return item.question_id === id })
......@@ -86,6 +87,9 @@ export default {
}
}
return false
},
allIsClass() {
console.log(this.questionParams, '====321')
}
},
watch: {
......
......@@ -14,7 +14,7 @@
<li
:key="index"
@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="txt">{{A_Z()[index]}}. {{item.option}}</div>
......@@ -57,15 +57,11 @@
</div>
</div>
<ul class="topics" :style="{height: contentHeight - 60 + 'px'}">
<!-- <template v-for="item in questionData.list"> -->
<!-- <template v-if="questionData.group_id === item[0].group_id"> -->
<!-- <template v-for="(listItem, index) in item"> -->
<li>
<div class="title">
<div class="num">{{ questionData.q_order }}.</div><div class="des" v-html="questionData.content"></div>
</div>
<ul :class="questionData.answer_count > 1 ? 'check-option' : 'radio-option'"><!-- radio-option check-option -->
<!-- <template v-if="listItem.id === questionData.id"> -->
<template v-for="(opt, oIndex) in questionData.options">
<li
:id="opt.id"
......@@ -77,12 +73,8 @@
<div class="txt">{{A_Z()[oIndex]}}. {{opt.option}}</div>
</li>
</template>
<!-- </template> -->
</ul>
</li>
<!-- </template> -->
<!-- </template> -->
<!-- </template> -->
</ul>
</div>
</template>
......@@ -105,6 +97,7 @@ export default {
this.questionData = this.questionParams.question
},
mounted() {
this.isChangeAnswer()
},
methods: {
answerConfirm() {
......@@ -112,8 +105,6 @@ export default {
const value = Object.values(this.currentCheck)
this.questionParams.answerRecord[key[0]] = value[0]
this.isChangeAnswer()
// console.log(this.questionParams.answerRecord)
// console.log(key, value)
},
// 自己选择的答案
myAnswer() {
......@@ -156,10 +147,14 @@ export default {
this.$forceUpdate()
},
isChangeAnswer() {
if (parseInt(this.$route.query.type) === 3) {
this.isAnswer = false
} else {
this.questionParams.answerRecord[this.questionData.id]
? this.isAnswer = false
: this.isAnswer = true
this.msgCenter.$emit('monitoringChanges', this.questionData.id)
}
},
signCallback() {
const pId = this.questionData.question_item_id
......@@ -199,6 +194,12 @@ export default {
}
return active
}
},
allIsClass() {
return (oId) => {
const findData = this.questionParams.question.user_answer.find(id => { return id === oId })
return findData ? 'active' : ''
}
}
},
watch: {
......
......@@ -26,7 +26,7 @@
<div class="foot" id="foot-h">
<div class="exam-btn">
<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"
>
确认答案
......@@ -41,11 +41,12 @@
>下一题</div>
</div>
<div class="rigth-btn">
<!-- <div class="sign">
<div class="icon"></div>
<div class="txt">{{ itemSign ? '取消标记' : '标记' }}</div>
</div> -->
<div class="end-exam-btn">
<div class="sign" @click="collectQuestion" v-if="$route.query.type != 2">
<div :class="questionParams.question.is_collection ? 'icon active' : 'icon'"></div>
<div class="txt">{{ questionParams.question.is_collection ? '已收藏' : '收藏' }}</div>
</div>
<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>
</div>
......@@ -55,8 +56,8 @@
</template>
<script>
import * as api from '@/api/exam.js'
import answerCard from '@/components/myQuestion/answerCard.vue'
import question from '@/components/myQuestion/question.vue'
import answerCard from './components/answerCard.vue'
import question from './components/question.vue'
export default {
components: {
question,
......@@ -89,10 +90,34 @@ export default {
this.initData()
},
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() {
this.getCardAll()
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() {
this.$refs.confirmBtn.answerConfirm()
......@@ -100,6 +125,36 @@ export default {
getDom(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) {
return list.map(list => {
......@@ -110,9 +165,9 @@ export default {
6: '判断题'
}
const typeTotal = {
0: 'total',
3: 'total',
1: 'error_total',
2: ''
2: 'collection_total'
}
const data = {
q_order: list.num,
......@@ -121,7 +176,7 @@ export default {
id: list.question_id,
options: list.question_options,
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,
user_answer: list.user_answer,
is_collection: list.is_collection,
......@@ -158,17 +213,27 @@ export default {
// 获取答题卡所有题
getCardAll() {
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
}
api
.getAllQuestion(param)
.then(response => {
if (response.list[0].question) {
this.questionParams.card = this.setCardData(response.list)
} else {
this.questionParams.card = response.list
}
})
.finally(() => {
})
},
setCardData(list) {
return list.map(item => {
item.question = JSON.parse(item.question)
return item
})
},
// ABC
A_Z() {
const result = []
......@@ -219,10 +284,12 @@ export default {
!isData && (this.supplyRequest())
}
} else {
if (parseInt(this.questionParams.questionIndex + 1) !== parseInt(this.questionParams.question.total_question_count)) {
this.questionParams.questionIndex++
const isData = this.questionData.list.find(i => { return i.q_order === this.questionParams.questionIndex + 2 })
!isData && (this.supplyRequest(1))
}
}
},
supplyRequest(n) {
const loading = this.$loading({
......@@ -256,6 +323,7 @@ export default {
question_type: this.$route.query.qType,
answer: JSON.stringify(this.questionParams.answerRecord)
}
window.localStorage.answerRecord = JSON.stringify(this.questionParams.answerRecord)
this.chcheReq(param, () => {})
},
// 清除所有答案 重新答题
......@@ -267,6 +335,7 @@ export default {
}
this.chcheReq(param, () => {
this.questionParams.questionIndex = 0
window.localStorage.removeItem('answerRecord')
this.initData()
})
},
......@@ -289,7 +358,8 @@ export default {
// 监听题的变化
changeQuestionIndex(newV, oldV) {
this.changeData()
this.handlePapers()
parseInt(this.$route.query.type) !== 3 && (this.handlePapers())
console.log(this.questionParams.question)
}
}
}
......@@ -408,6 +478,18 @@ export default {
.rigth-btn{
display: flex;
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{
width: 260px;
display: flex;
......@@ -432,8 +514,12 @@ export default {
margin: 0 auto;
width: 24px;
height: 24px;
background: url(@/assets/images/sign.png);
background: url(@/assets/images/collection.png);
background-size:100% 100%;
&.active{
background: url(@/assets/images/collection2.png);
background-size:100% 100%;
}
}
.txt{
font-size: 14px;
......
......@@ -36,12 +36,12 @@
@click="changeIndex('next')"
>下一题</div>
</div>
<div class="rigth-btn" @click="signHandle" v-if="!$route.query.id">
<!-- <div class="sign">
<div class="icon"></div>
<div class="txt">{{ itemSign ? '取消标记' : '标记' }}</div>
</div> -->
<div class="end-exam-btn">
<div class="rigth-btn" @click="signHandle">
<div class="sign" @click="collectQuestion">
<div :class="questionParams.question.isCollection ? 'icon active' : 'icon'"></div>
<div class="txt">{{ questionParams.question.isCollection ? '已收藏' : '收藏' }}</div>
</div>
<div class="end-exam-btn" v-if="!$route.query.id">
<div class="btn" @click="endExam">交卷</div>
</div>
</div>
......@@ -95,6 +95,36 @@ export default {
this.getTopic()
},
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() {
this.$refs.signHandle.onSignHandle()
......@@ -205,7 +235,8 @@ export default {
id: cItem.id,
options: cItem.question_options,
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.length > 5 || this.$route.query.id === 'all' || this.$route.query.id === 'err') {
......@@ -438,9 +469,13 @@ export default {
margin: 0 auto;
width: 24px;
height: 24px;
background: url(@/assets/images/sign.png);
background: url(@/assets/images/collection.png);
background-size:100% 100%;
&.active{
background: url(@/assets/images/collection2.png);
background-size:100% 100%;
}
}
.txt{
font-size: 14px;
color: #CCCCCC;
......
......@@ -30,22 +30,22 @@ const examAnswer = [
/* 考前摸底 */
{
path: '/testExam',
component: () => import(/* webpackChunkName: "exam" */ '@/pages/testExam')
component: () => import(/* webpackChunkName: "exam" */ '@/pages/exam/testExam/index')
},
/* 考前摸底结果页 */
{
path: '/testExam/result',
component: () => import(/* webpackChunkName: "exam" */ '@/pages/testExam/exam/result')
component: () => import(/* webpackChunkName: "exam" */ '@/pages/exam/testExam/exam/result')
},
/* 真题实战 */
{
path: '/mock',
component: () => import(/* webpackChunkName: "exam" */ '@/pages/mockExam')
component: () => import(/* webpackChunkName: "exam" */ '@/pages/exam/mockExam/index')
},
/* 真题实战结果页 */
{
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 [
/* 考前摸底考试 */
{
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',
component: () => import(/* webpackChunkName: "course-learn" */ '@/pages/mockExam/exam/index')
component: () => import(/* webpackChunkName: "course-learn" */ '@/pages/exam/mockExam/exam/index')
},
/* 错题收藏全部列表详情 */
{
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
]
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论