import { ref, watch } from "vue"; import dayjs from "dayjs"; import Api from '@/api/api'; import router from "@/router/" import store from "@/store/" export function useExamTest() { let letter = ["A", "B", "C", "D", "E", "F"] let interfaceErrVisible = ref(false) let correctAnswerVisible = ref(false) let list = ref([ { createTime: '2021-11-05 10:25:51', id: 20, answerArr: [""], image: null, imageYdt: null, answer: '√', answerkeyword: null, explainGif: 'https://t1-1305573081.file.myqcloud.com/qb/gif/20.gif', explainJq: '题目中看到“追究”.答对;“不追究”.答错。', explainJs: '《道路交通安全法》第九十九条:未取得机动车驾驶证、机动车驾驶证被吊销或者机动车驾驶证被暂扣期间驾驶机动车的,由公安机关交通管理部门处二百元以上二千元以下罚款,可以并处十五日以下拘留。', explainMp3: 'https://t1-1305573081.file.myqcloud.com/qb/mp3/explain20.mp3', issue: '对未取得驾驶证驾驶机动车的,追究其法律责任。', opts: '√-×', optsArr: ['√', '×'], skillkeyword: '追究-答对', titlekeyword: '追究', issuemp3: 'https://t1-1305573081.file.myqcloud.com/qb/issue/issue20.mp3', answermp3: 'https://t1-1305573081.file.myqcloud.com/qb/answer/answer20.mp3', explainjsmp3: 'https://t1-1305573081.file.myqcloud.com/qb/explainjs/explainJS20.mp3', liceCar: '1', liceBus: '1', liceTruck: '1', liceMoto: '0', sequeIssue: '2', classIssue: '32', placeIssue: '0', excellIssue: '1', copyIssue: '0', mockIssue: '0', sequeIssueName: '练习二', placeIssueName: null, excellIssueName: '必学题一', classIssueName: '刑法题', questionType: 1, subject: 1, classSort: 16, excellSort: 39, sequeSort: 118, placeSort: null, userAnswer: '', }, { createTime: '2021-11-05 10:25:51', id: 20, image: null, imageYdt: null, answer: '√', answerkeyword: null, explainGif: 'https://t1-1305573081.file.myqcloud.com/qb/gif/20.gif', explainJq: '题目中看到“追究”.答对;“不追究”.答错。', explainJs: '《道路交通安全法》第九十九条:未取得机动车驾驶证、机动车驾驶证被吊销或者机动车驾驶证被暂扣期间驾驶机动车的,由公安机关交通管理部门处二百元以上二千元以下罚款,可以并处十五日以下拘留。', explainMp3: 'https://t1-1305573081.file.myqcloud.com/qb/mp3/explain20.mp3', issue: '对未取得驾驶证驾驶机动车的,追究其法律责任。', opts: '√-×', optsArr: ['√', '×'], skillkeyword: '追究-答对', titlekeyword: '追究', issuemp3: 'https://t1-1305573081.file.myqcloud.com/qb/issue/issue20.mp3', answermp3: 'https://t1-1305573081.file.myqcloud.com/qb/answer/answer20.mp3', explainjsmp3: 'https://t1-1305573081.file.myqcloud.com/qb/explainjs/explainJS20.mp3', liceCar: '1', liceBus: '1', liceTruck: '1', liceMoto: '0', sequeIssue: '2', classIssue: '32', placeIssue: '0', excellIssue: '1', copyIssue: '0', mockIssue: '0', sequeIssueName: '练习二', placeIssueName: null, excellIssueName: '必学题一', classIssueName: '刑法题', questionType: 1, subject: 1, classSort: 16, excellSort: 39, sequeSort: 118, placeSort: null, userAnswer: '', }, { createTime: '2021-11-05 10:25:51', id: 20, image: null, imageYdt: null, answer: '√', answerkeyword: null, explainGif: 'https://t1-1305573081.file.myqcloud.com/qb/gif/20.gif', explainJq: '题目中看到“追究”.答对;“不追究”.答错。', explainJs: '《道路交通安全法》第九十九条:未取得机动车驾驶证、机动车驾驶证被吊销或者机动车驾驶证被暂扣期间驾驶机动车的,由公安机关交通管理部门处二百元以上二千元以下罚款,可以并处十五日以下拘留。', explainMp3: 'https://t1-1305573081.file.myqcloud.com/qb/mp3/explain20.mp3', issue: '对未取得驾驶证驾驶机动车的,追究其法律责任。', opts: '√-×', optsArr: ['√', '×'], skillkeyword: '追究-答对', titlekeyword: '追究', issuemp3: 'https://t1-1305573081.file.myqcloud.com/qb/issue/issue20.mp3', answermp3: 'https://t1-1305573081.file.myqcloud.com/qb/answer/answer20.mp3', explainjsmp3: 'https://t1-1305573081.file.myqcloud.com/qb/explainjs/explainJS20.mp3', liceCar: '1', liceBus: '1', liceTruck: '1', liceMoto: '0', sequeIssue: '2', classIssue: '32', placeIssue: '0', excellIssue: '1', copyIssue: '0', mockIssue: '0', sequeIssueName: '练习二', placeIssueName: null, excellIssueName: '必学题一', classIssueName: '刑法题', questionType: 1, subject: 1, classSort: 16, excellSort: 39, sequeSort: 118, placeSort: null, userAnswer: '', }, { createTime: '2021-11-05 10:25:51', id: 20, image: null, imageYdt: null, answer: '√', answerkeyword: null, explainGif: 'https://t1-1305573081.file.myqcloud.com/qb/gif/20.gif', explainJq: '题目中看到“追究”.答对;“不追究”.答错。', explainJs: '《道路交通安全法》第九十九条:未取得机动车驾驶证、机动车驾驶证被吊销或者机动车驾驶证被暂扣期间驾驶机动车的,由公安机关交通管理部门处二百元以上二千元以下罚款,可以并处十五日以下拘留。', explainMp3: 'https://t1-1305573081.file.myqcloud.com/qb/mp3/explain20.mp3', issue: '对未取得驾驶证驾驶机动车的,追究其法律责任。', opts: '√-×', optsArr: ['√', '×'], skillkeyword: '追究-答对', titlekeyword: '追究', issuemp3: 'https://t1-1305573081.file.myqcloud.com/qb/issue/issue20.mp3', answermp3: 'https://t1-1305573081.file.myqcloud.com/qb/answer/answer20.mp3', explainjsmp3: 'https://t1-1305573081.file.myqcloud.com/qb/explainjs/explainJS20.mp3', liceCar: '1', liceBus: '1', liceTruck: '1', liceMoto: '0', sequeIssue: '2', classIssue: '32', placeIssue: '0', excellIssue: '1', copyIssue: '0', mockIssue: '0', sequeIssueName: '练习二', placeIssueName: null, excellIssueName: '必学题一', classIssueName: '刑法题', questionType: 1, subject: 1, classSort: 16, excellSort: 39, sequeSort: 118, placeSort: null, userAnswer: '', }, { createTime: '2021-11-05 10:25:51', id: 20, image: null, imageYdt: null, answer: '√', answerkeyword: null, explainGif: 'https://t1-1305573081.file.myqcloud.com/qb/gif/20.gif', explainJq: '题目中看到“追究”.答对;“不追究”.答错。', explainJs: '《道路交通安全法》第九十九条:未取得机动车驾驶证、机动车驾驶证被吊销或者机动车驾驶证被暂扣期间驾驶机动车的,由公安机关交通管理部门处二百元以上二千元以下罚款,可以并处十五日以下拘留。', explainMp3: 'https://t1-1305573081.file.myqcloud.com/qb/mp3/explain20.mp3', issue: '对未取得驾驶证驾驶机动车的,追究其法律责任。', opts: '√-×', optsArr: ['√', '×'], skillkeyword: '追究-答对', titlekeyword: '追究', issuemp3: 'https://t1-1305573081.file.myqcloud.com/qb/issue/issue20.mp3', answermp3: 'https://t1-1305573081.file.myqcloud.com/qb/answer/answer20.mp3', explainjsmp3: 'https://t1-1305573081.file.myqcloud.com/qb/explainjs/explainJS20.mp3', liceCar: '1', liceBus: '1', liceTruck: '1', liceMoto: '0', sequeIssue: '2', classIssue: '32', placeIssue: '0', excellIssue: '1', copyIssue: '0', mockIssue: '0', sequeIssueName: '练习二', placeIssueName: null, excellIssueName: '必学题一', classIssueName: '刑法题', questionType: 1, subject: 1, classSort: 16, excellSort: 39, sequeSort: 118, placeSort: null, userAnswer: '', }, { createTime: '2021-11-05 10:25:51', id: 20, image: null, imageYdt: null, answer: '√', answerkeyword: null, explainGif: 'https://t1-1305573081.file.myqcloud.com/qb/gif/20.gif', explainJq: '题目中看到“追究”.答对;“不追究”.答错。', explainJs: '《道路交通安全法》第九十九条:未取得机动车驾驶证、机动车驾驶证被吊销或者机动车驾驶证被暂扣期间驾驶机动车的,由公安机关交通管理部门处二百元以上二千元以下罚款,可以并处十五日以下拘留。', explainMp3: 'https://t1-1305573081.file.myqcloud.com/qb/mp3/explain20.mp3', issue: '对未取得驾驶证驾驶机动车的,追究其法律责任。', opts: '√-×', optsArr: ['√', '×'], skillkeyword: '追究-答对', titlekeyword: '追究', issuemp3: 'https://t1-1305573081.file.myqcloud.com/qb/issue/issue20.mp3', answermp3: 'https://t1-1305573081.file.myqcloud.com/qb/answer/answer20.mp3', explainjsmp3: 'https://t1-1305573081.file.myqcloud.com/qb/explainjs/explainJS20.mp3', liceCar: '1', liceBus: '1', liceTruck: '1', liceMoto: '0', sequeIssue: '2', classIssue: '32', placeIssue: '0', excellIssue: '1', copyIssue: '0', mockIssue: '0', sequeIssueName: '练习二', placeIssueName: null, excellIssueName: '必学题一', classIssueName: '刑法题', questionType: 1, subject: 1, classSort: 16, excellSort: 39, sequeSort: 118, placeSort: null, userAnswer: '', }, { createTime: '2021-11-05 10:25:51', id: 20, image: null, imageYdt: null, answer: '√', answerkeyword: null, explainGif: 'https://t1-1305573081.file.myqcloud.com/qb/gif/20.gif', explainJq: '题目中看到“追究”.答对;“不追究”.答错。', explainJs: '《道路交通安全法》第九十九条:未取得机动车驾驶证、机动车驾驶证被吊销或者机动车驾驶证被暂扣期间驾驶机动车的,由公安机关交通管理部门处二百元以上二千元以下罚款,可以并处十五日以下拘留。', explainMp3: 'https://t1-1305573081.file.myqcloud.com/qb/mp3/explain20.mp3', issue: '对未取得驾驶证驾驶机动车的,追究其法律责任。', opts: '√-×', optsArr: ['√', '×'], skillkeyword: '追究-答对', titlekeyword: '追究', issuemp3: 'https://t1-1305573081.file.myqcloud.com/qb/issue/issue20.mp3', answermp3: 'https://t1-1305573081.file.myqcloud.com/qb/answer/answer20.mp3', explainjsmp3: 'https://t1-1305573081.file.myqcloud.com/qb/explainjs/explainJS20.mp3', liceCar: '1', liceBus: '1', liceTruck: '1', liceMoto: '0', sequeIssue: '2', classIssue: '32', placeIssue: '0', excellIssue: '1', copyIssue: '0', mockIssue: '0', sequeIssueName: '练习二', placeIssueName: null, excellIssueName: '必学题一', classIssueName: '刑法题', questionType: 1, subject: 1, classSort: 16, excellSort: 39, sequeSort: 118, placeSort: null, userAnswer: '', }, { createTime: '2021-11-05 10:25:51', id: 20, image: null, imageYdt: null, answer: '√', answerkeyword: null, explainGif: 'https://t1-1305573081.file.myqcloud.com/qb/gif/20.gif', explainJq: '题目中看到“追究”.答对;“不追究”.答错。', explainJs: '《道路交通安全法》第九十九条:未取得机动车驾驶证、机动车驾驶证被吊销或者机动车驾驶证被暂扣期间驾驶机动车的,由公安机关交通管理部门处二百元以上二千元以下罚款,可以并处十五日以下拘留。', explainMp3: 'https://t1-1305573081.file.myqcloud.com/qb/mp3/explain20.mp3', issue: '对未取得驾驶证驾驶机动车的,追究其法律责任。', opts: '√-×', optsArr: ['√', '×'], skillkeyword: '追究-答对', titlekeyword: '追究', issuemp3: 'https://t1-1305573081.file.myqcloud.com/qb/issue/issue20.mp3', answermp3: 'https://t1-1305573081.file.myqcloud.com/qb/answer/answer20.mp3', explainjsmp3: 'https://t1-1305573081.file.myqcloud.com/qb/explainjs/explainJS20.mp3', liceCar: '1', liceBus: '1', liceTruck: '1', liceMoto: '0', sequeIssue: '2', classIssue: '32', placeIssue: '0', excellIssue: '1', copyIssue: '0', mockIssue: '0', sequeIssueName: '练习二', placeIssueName: null, excellIssueName: '必学题一', classIssueName: '刑法题', questionType: 1, subject: 1, classSort: 16, excellSort: 39, sequeSort: 118, placeSort: null, userAnswer: '', }, { createTime: '2021-11-05 10:25:51', id: 20, image: null, imageYdt: null, answer: '√', answerkeyword: null, explainGif: 'https://t1-1305573081.file.myqcloud.com/qb/gif/20.gif', explainJq: '题目中看到“追究”.答对;“不追究”.答错。', explainJs: '《道路交通安全法》第九十九条:未取得机动车驾驶证、机动车驾驶证被吊销或者机动车驾驶证被暂扣期间驾驶机动车的,由公安机关交通管理部门处二百元以上二千元以下罚款,可以并处十五日以下拘留。', explainMp3: 'https://t1-1305573081.file.myqcloud.com/qb/mp3/explain20.mp3', issue: '对未取得驾驶证驾驶机动车的,追究其法律责任。', opts: '√-×', optsArr: ['√', '×'], skillkeyword: '追究-答对', titlekeyword: '追究', issuemp3: 'https://t1-1305573081.file.myqcloud.com/qb/issue/issue20.mp3', answermp3: 'https://t1-1305573081.file.myqcloud.com/qb/answer/answer20.mp3', explainjsmp3: 'https://t1-1305573081.file.myqcloud.com/qb/explainjs/explainJS20.mp3', liceCar: '1', liceBus: '1', liceTruck: '1', liceMoto: '0', sequeIssue: '2', classIssue: '32', placeIssue: '0', excellIssue: '1', copyIssue: '0', mockIssue: '0', sequeIssueName: '练习二', placeIssueName: null, excellIssueName: '必学题一', classIssueName: '刑法题', questionType: 1, subject: 1, classSort: 16, excellSort: 39, sequeSort: 118, placeSort: null, userAnswer: '', }, { createTime: '2021-11-05 10:25:51', id: 20, image: null, imageYdt: null, answer: '√', answerkeyword: null, explainGif: 'https://t1-1305573081.file.myqcloud.com/qb/gif/20.gif', explainJq: '题目中看到“追究”.答对;“不追究”.答错。', explainJs: '《道路交通安全法》第九十九条:未取得机动车驾驶证、机动车驾驶证被吊销或者机动车驾驶证被暂扣期间驾驶机动车的,由公安机关交通管理部门处二百元以上二千元以下罚款,可以并处十五日以下拘留。', explainMp3: 'https://t1-1305573081.file.myqcloud.com/qb/mp3/explain20.mp3', issue: '对未取得驾驶证驾驶机动车的,追究其法律责任。', opts: '√-×', optsArr: ['√', '×'], skillkeyword: '追究-答对', titlekeyword: '追究', issuemp3: 'https://t1-1305573081.file.myqcloud.com/qb/issue/issue20.mp3', answermp3: 'https://t1-1305573081.file.myqcloud.com/qb/answer/answer20.mp3', explainjsmp3: 'https://t1-1305573081.file.myqcloud.com/qb/explainjs/explainJS20.mp3', liceCar: '1', liceBus: '1', liceTruck: '1', liceMoto: '0', sequeIssue: '2', classIssue: '32', placeIssue: '0', excellIssue: '1', copyIssue: '0', mockIssue: '0', sequeIssueName: '练习二', placeIssueName: null, excellIssueName: '必学题一', classIssueName: '刑法题', questionType: 1, subject: 1, classSort: 16, excellSort: 39, sequeSort: 118, placeSort: null, userAnswer: '', }, ]); let correctScore = ref(0) let errorScore = ref(0) let beforeSubmitVisible = ref(false) let submitVisible = ref(false) let wrongQuestion = ref({ createTime: "2021-11-05 10:25:51", id: 20, image: null, imageYdt: null, answer: "√", answerkeyword: null, explainGif: "https://t1-1305573081.file.myqcloud.com/qb/gif/20.gif", explainJq: "题目中看到“追究”.答对;“不追究”.答错。", explainJs: "《道路交通安全法》第九十九条:未取得机动车驾驶证、机动车驾驶证被吊销或者机动车驾驶证被暂扣期间驾驶机动车的,由公安机关交通管理部门处二百元以上二千元以下罚款,可以并处十五日以下拘留。", explainMp3: "https://t1-1305573081.file.myqcloud.com/qb/mp3/explain20.mp3", issue: "对未取得驾驶证驾驶机动车的,追究其法律责任。", opts: "√-×", optsArr: ["√", "×"], skillkeyword: "追究-答对", titlekeyword: "追究", issuemp3: "https://t1-1305573081.file.myqcloud.com/qb/issue/issue20.mp3", answermp3: "https://t1-1305573081.file.myqcloud.com/qb/answer/answer20.mp3", explainjsmp3: "https://t1-1305573081.file.myqcloud.com/qb/explainjs/explainJS20.mp3", liceCar: "1", liceBus: "1", liceTruck: "1", liceMoto: "0", sequeIssue: "2", classIssue: "32", placeIssue: "0", excellIssue: "1", copyIssue: "0", mockIssue: "0", sequeIssueName: "练习二", placeIssueName: null, excellIssueName: "必学题一", classIssueName: "刑法题", questionType: 1, subject: 1, classSort: 16, excellSort: 39, sequeSort: 118, placeSort: null, userAnswer: "", }) let submitScore = () => { //重置为0,不然会有数据不准确的bug correctScore.value = 0 errorScore.value = 0 list.value.forEach(item => { //如果item为假就不统计 if (item.userAnswer.length == 0) { return } if (item.questionType < 3) { correctScore.value += item.answer == item.userAnswer ? 1 : 0 errorScore.value += item.answer == item.userAnswer ? 0 : 1 } else if (item.questionType == 3) { item.answer.split("-").sort().toString() === item.userAnswer.sort().toString() ? ++correctScore.value : ++errorScore.value } // correctScore.value += item.answer == item.userAnswer ? 1 : 0 // if (item.userAnswer) { // errorScore.value += item.answer == item.userAnswer ? 0 : 1 // } }) beforeSubmitVisible.value = true store.commit('SET_ENDTIME', { endTime: `${dayjs().format('MM-DD HH:mm:ss')}`, }); } let listIndex = ref(0); let wrongQuestionIndex = ref(0) watch(listIndex, (newVal:number, oldVal:number) => { if (newVal !== oldVal) { if (list.value[oldVal].questionType == 3) { let userAnswerLetter: any[] = []; list.value[oldVal].userAnswer.forEach((element: string) => { userAnswerLetter.push( letter[list.value[oldVal].optsArr.indexOf(element)] ); }); if ( list.value[oldVal].userAnswer.length > 0 && list.value[oldVal].userAnswer.sort().toString() !== list.value[oldVal].answer.split("-").sort().toString() ) { // this.$set(this.list[oldVal], "isError", true); list.value[oldVal].isError = true list.value[oldVal].isComplete = (list.value[oldVal].userAnswer.length!==0) list.value[oldVal].userAnswerLetter = userAnswerLetter.sort().join("") // this.$set( // this.list[oldVal], // "userAnswerLetter", // userAnswerLetter.sort().join("") // ); correctAnswerVisible.value = true; wrongQuestion.value = list.value[oldVal]; wrongQuestionIndex.value = oldVal; } else { list.value[oldVal].userAnswerLetter = userAnswerLetter.sort().join("") list.value[oldVal].isError = false list.value[oldVal].isComplete = (list.value[oldVal].userAnswer.length!==0) correctAnswerVisible.value = false; } } else if (list.value[oldVal].questionType < 3) { let userAnswerLetter = []; if ( list.value[oldVal].userAnswer && list.value[oldVal].userAnswer !== list.value[oldVal].answer ) { list.value[oldVal].userAnswerLetter = letter[ list.value[oldVal].optsArr.indexOf(list.value[oldVal].userAnswer) ] list.value[oldVal].isError = true //判断是否完成 list.value[oldVal].isComplete = (list.value[oldVal].userAnswer.length!==0) correctAnswerVisible.value = true; list.value[oldVal].userAnswerLetter = letter[ list.value[oldVal].optsArr.indexOf(list.value[oldVal].userAnswer) ] wrongQuestion.value = list.value[oldVal]; wrongQuestionIndex.value = oldVal; } else { correctAnswerVisible.value = false list.value[oldVal].isError = false //判断是否完成 list.value[oldVal].isComplete = (list.value[oldVal].userAnswer.length!==0) list.value[oldVal].userAnswerLetter = letter[ list.value[oldVal].optsArr.indexOf(list.value[oldVal].userAnswer) ] // this.$set( // this.list[oldVal], // "userAnswerLetter", // this.letter[ // this.list[oldVal].optsArr.indexOf(this.list[oldVal].userAnswer) // ] // ); // this.correctAnswer = false; } } } }) let changeListIndex = (e: PointerEvent) => { if (e.target?.dataset?.key) { listIndex.value = Number(e.target?.dataset?.key) - 1; } }; let selectExamAnswers = (item: string) => { if( list.value[listIndex.value].isComplete){ return } if (list.value[listIndex.value].userAnswer.includes(item)) { list.value[listIndex.value].userAnswer = list.value[listIndex.value].userAnswer.filter((_item, _index) => { return _item !== item }) } else { list.value[listIndex.value].userAnswer.push(item) } } let selectExamAnswer = (item: string) => { if( list.value[listIndex.value].isComplete){ return } list.value[listIndex.value] = { ...list.value[listIndex.value], userAnswer: item }; console.log(list.value[listIndex.value], item); }; let beforeTopic = () => { if (listIndex.value == 0) { return; } listIndex.value = listIndex.value - 1; }; let nextTopic = () => { if (listIndex.value == list.value.length - 1) { return; } listIndex.value = listIndex.value + 1; }; let getPgae = () => { console.log(router) if(router.currentRoute.value.query.gs){ let params = { gs:router.currentRoute.value.query.gs as string, // model: router.currentRoute.value.query.model as string, subject: Number(router.currentRoute.value.query.subject) } Api.openApiquestionInfoSelectTestQuestionInfo(params).then((res) => { res.data.rows.forEach((item) => { item.optsArr = item.opts.split('-'); item.answerArr = item.answer.split('-'); item.questionType < 3 ? item.userAnswer = '' : item.userAnswer = []; }); if (!res.data.rows || res.data.rows.length === 0) { interfaceErrVisible.value = true return } //科目一多余100道题目的切割 if (Number(router.currentRoute.value.query.subject) == 1 && res.data.rows.length > 100) { res.data.rows.splice(100) } //科目四多余50题切割 if (Number(router.currentRoute.value.query.subject) == 4 && res.data.rows.length > 50) { res.data.rows.splice(50) } list.value = res.data.rows; }).catch(err => { interfaceErrVisible.value = true }); } else{ let params = { // gs:router.currentRoute.value.query.gs as string, model: router.currentRoute.value.query.model as string, subject: Number(router.currentRoute.value.query.subject) } Api.openApiquestion2InfoSelectTestQuestionInfo(params).then((res) => { res.data.rows.forEach((item) => { item.optsArr = item.opts.split('-'); item.answerArr = item.answer.split('-'); item.questionType < 3 ? item.userAnswer = '' : item.userAnswer = []; }); if (!res.data.rows || res.data.rows.length === 0) { interfaceErrVisible.value = true return } //科目一多余100道题目的切割 if (Number(router.currentRoute.value.query.subject) == 1 && res.data.rows.length > 100) { res.data.rows.splice(100) } //科目四多余50题切割 if (Number(router.currentRoute.value.query.subject) == 4 && res.data.rows.length > 50) { res.data.rows.splice(50) } list.value = res.data.rows; }).catch(err => { interfaceErrVisible.value = true }); } } return { interfaceErrVisible, submitScore, changeListIndex, selectExamAnswer, beforeTopic, nextTopic, getPgae, selectExamAnswers, listIndex, list, correctScore, errorScore, beforeSubmitVisible, submitVisible, wrongQuestion, wrongQuestionIndex, correctAnswerVisible, } }