| | |
| | | <div class="resolving-btn" @click="showCollaspe('noshow')" v-else>【收起解析】</div> |
| | | </div> |
| | | <!-- <div @click="clearCollect">清空收藏</div> --> |
| | | <!-- <div @click="clearError">清空错题</div> --> |
| | | <div class="redo-btn" @click="restart"> |
| | | <img src="@/assets/images/examination/chongzuo.png" alt=""> |
| | | <img src="@/assets/images/examination/chongzuo.png" alt="" /> |
| | | <span>重做</span> |
| | | </div> |
| | | </div> |
| | |
| | | |
| | | <script setup lang="ts"> |
| | | import { ref, reactive, defineExpose, defineProps, inject } from 'vue' |
| | | import axios from 'axios' |
| | | import { getPublicImage } from '@/assets/js/middleGround/tool.js' |
| | | import { requestCtx } from '@/assets/js/config.js' |
| | | import { ElMessageBox } from 'element-plus' |
| | |
| | | } |
| | | // 弹窗弹窗按钮 |
| | | const closeDialog = () => { |
| | | if(props.type =='option') { |
| | | if(!examination.submitStatus) { |
| | | ElMessageBox.confirm('未提交,是否退出答题', '提示', { |
| | | if (props.type == 'option') { |
| | | if (!examination.submitStatus) { |
| | | ElMessageBox.confirm('未提交,是否退出答题', '提示', { |
| | | confirmButtonText: '确认', |
| | | cancelButtonText: '取消', |
| | | autofocus: false, |
| | | type: 'warning' |
| | | }).then(() => { |
| | | examination.dialogVisible = false |
| | | saveAnswerData() |
| | | examination.cardList = [] |
| | | }) |
| | | } else { |
| | |
| | | } |
| | | } else { |
| | | examination.dialogVisible = false |
| | | handleQuestion() |
| | | // handleQuestion() |
| | | if(props.type == 'errorQuestion') { |
| | | handleQuestion() |
| | | } |
| | | examination.cardList = [] |
| | | } |
| | | |
| | | } |
| | | // 开关弹窗方法 |
| | | const handleExaminationDialog = (type: boolean) => { |
| | |
| | | } else if (props.type == 'errorQuestion') { |
| | | examination.submitStatus = true |
| | | await getErrorIdList() |
| | | getCollectIdList() |
| | | } |
| | | } |
| | | // 重做 |
| | |
| | | const setCollect = (num: number, number: number) => { |
| | | const item = examination.cardList[num].infoList[number] |
| | | item.isCollect = !item.isCollect |
| | | console.log(item) |
| | | if (examination.collectList.length == 0) { |
| | | examination.collectList.push(item.id) |
| | | if (item.isJson) { |
| | | // json题目收藏取消 |
| | | let jsonCollectID = examination.allCollect[1].collectList |
| | | if (jsonCollectID.length == 0) { |
| | | jsonCollectID.push(item.id) |
| | | } else { |
| | | const isShow = jsonCollectID.findIndex((citem) => citem == item.id) |
| | | if (isShow == -1) { |
| | | jsonCollectID.push(item.id) |
| | | } else { |
| | | jsonCollectID = jsonCollectID.filter((citem) => citem != item.id) |
| | | } |
| | | } |
| | | for (let index = 0; index < examination.allCollect.length; index++) { |
| | | const item = examination.allCollect[index] |
| | | if (item.type == 'json') item.collectList = jsonCollectID |
| | | } |
| | | } else { |
| | | const isShow = examination.collectList.findIndex((citem) => citem == item.id) |
| | | if (isShow == -1) { |
| | | // bits题目收藏/取消 |
| | | if (examination.collectList.length == 0) { |
| | | examination.collectList.push(item.id) |
| | | } else { |
| | | examination.collectList = examination.collectList.filter((citem) => citem != item.id) |
| | | const isShow = examination.collectList.findIndex((citem) => citem == item.id) |
| | | if (isShow == -1) { |
| | | examination.collectList.push(item.id) |
| | | } else { |
| | | examination.collectList = examination.collectList.filter((citem) => citem != item.id) |
| | | } |
| | | } |
| | | for (let index = 0; index < examination.allCollect.length; index++) { |
| | | const item = examination.allCollect[index] |
| | | if (item.type == 'bits') item.collectList = examination.collectList |
| | | } |
| | | } |
| | | for (let index = 0; index < examination.allCollect.length; index++) { |
| | | const item = examination.allCollect[index] |
| | | if (item.type == 'bits') item.collectList = examination.collectList |
| | | } |
| | | console.log('收藏还是取消', examination.allCollect) |
| | | |
| | | MG.identity |
| | | .setUserKey({ |
| | | setKeyRequests: [ |
| | |
| | | examination.submitStatus = true |
| | | let value = JSON.parse(res[0].value) |
| | | if (value) { |
| | | console.log('旧数据', value) |
| | | // 有答题记录,携带旧数据获取题目 |
| | | examination.cardList = (await getQuestionList(value)) as any |
| | | } |
| | | } else { |
| | | examination.cardList = (await getQuestionList([])) as any |
| | | const userAnswerList = await getUserAnswer() |
| | | if(userAnswerList) { |
| | | examination.cardList = (await getQuestionList(userAnswerList)) as any |
| | | } else { |
| | | examination.cardList = (await getQuestionList([])) as any |
| | | } |
| | | } |
| | | }) |
| | | } |
| | |
| | | Embedded_QuestionBank_Difficulty: [] |
| | | } |
| | | } |
| | | console.log('请求日·', examination.collectList) |
| | | |
| | | const res = await MG.store.getProductDetail(query) |
| | | if (!res.datas) return false |
| | | res.datas.cmsDatas[0].datas.forEach((item, index) => { |
| | |
| | | : '', |
| | | isSubmit: false, // 查看解析 |
| | | isRight: oldObj ? oldObj.isRight : null, // 是否正确 |
| | | isComplete: oldObj ? true : false, |
| | | isComplete: examination.submitStatus, |
| | | isCollect: examination.collectList.indexOf(item.id) > -1 ? true : false, |
| | | isUnfold: '' |
| | | } |
| | |
| | | ).collectList |
| | | } |
| | | } catch (error) {} |
| | | if (examination.collectList && examination.collectList.length > 0) { |
| | | if ( |
| | | examination.allCollect[0].collectList.length || |
| | | examination.allCollect[1].collectList.length |
| | | ) { |
| | | examination.cardList = (await getCollectDataList()) as any |
| | | await getJsonCollect() |
| | | } else { |
| | | examination.loading = false |
| | | examination.noData = true |
| | | ElMessageBox.confirm('收藏夹暂无数据!', '提示', { |
| | | confirmButtonText: '确定', |
| | | showCancelButton: false, |
| | | type: 'warning' |
| | | }) |
| | | .then(() => { |
| | | examination.submitStatus = true |
| | | examination.dialogVisible = false |
| | | }) |
| | | .catch(() => { |
| | | examination.dialogVisible = false |
| | | }) |
| | | } |
| | | }) |
| | | } |
| | |
| | | } |
| | | } |
| | | examination.loading = false |
| | | return cardList.filter((item) => item.infoList.length > 0) |
| | | return cardList |
| | | } |
| | | // 我的收藏模式下,获取收藏的假题(json) |
| | | const getJsonCollect = async () => { |
| | | if (!props.activeBook.jsonQUestion) { |
| | | examination.cardList = examination.cardList.filter((item) => item.infoList.length > 0) |
| | | return false |
| | | } |
| | | let questionArr = [] |
| | | let jsonCollectList = [] |
| | | for (let index = 0; index < props.activeBook.jsonQUestion.length; index++) { |
| | | const item = props.activeBook.jsonQUestion[index] |
| | | const res = await axios.get(props.activeBook.resourceUrl + '/question-' + item + '.json') |
| | | questionArr.push(...res.data.data) |
| | | } |
| | | for (let index = 0; index < questionArr.length; index++) { |
| | | const item = questionArr[index] |
| | | for (let cindex = 0; cindex < examination.allCollect[1].collectList.length; cindex++) { |
| | | const citem = examination.allCollect[1].collectList[cindex] |
| | | if (item.id == citem) { |
| | | item.isCollect = true |
| | | item.isJson = true |
| | | jsonCollectList.push(item) |
| | | } |
| | | } |
| | | } |
| | | |
| | | for (let index = 0; index < jsonCollectList.length; index++) { |
| | | const item = jsonCollectList[index] |
| | | if (item.type && item.type == 'material') { |
| | | examination.cardList.push(item) |
| | | } else if (item.questionType == 'singleChoice') { |
| | | examination.cardList[0].infoList.push(item) |
| | | } else if (item.questionType == 'judge') { |
| | | examination.cardList[1].infoList.push(item) |
| | | } else if (item.questionType == 'multipleChoice') { |
| | | examination.cardList[2].infoList.push(item) |
| | | } else if (item.questionType == 'completion') { |
| | | examination.cardList[3].infoList.push(item) |
| | | } else if (item.questionType == 'shortAnswer') { |
| | | examination.cardList[4].infoList.push(item) |
| | | } |
| | | } |
| | | examination.cardList = examination.cardList.filter((item) => item.infoList.length > 0) |
| | | console.log('拼接题', examination.cardList) |
| | | } |
| | | // 我的错题模式下获取错题id列表 |
| | | const getErrorIdList = async () => { |
| | |
| | | try { |
| | | const error = JSON.parse(res[0].value) |
| | | if (error.length) { |
| | | console.log('有吗', error) |
| | | examination.errorList = error.find((citem) => citem.type == 'bits').errorList |
| | | examination.allCollect[0].collectList = error.find( |
| | | (citem) => citem.type == 'bits' |
| | | ).errorList |
| | | examination.allCollect[1].collectList = error.find( |
| | | (citem) => citem.type == 'json' |
| | | ).errorList |
| | | examination.allError[0].errorList = error.find((citem) => citem.type == 'bits').errorList |
| | | examination.allError[1].errorList = error.find((citem) => citem.type == 'json').errorList |
| | | } |
| | | } catch (error) {} |
| | | if (examination.errorList && examination.errorList.length) { |
| | | if (examination.allError[0].errorList || examination.allError[1].errorList) { |
| | | examination.cardList = (await getErrorDataList()) as any |
| | | await getJsonError() |
| | | } else { |
| | | examination.loading = false |
| | | ElMessageBox.confirm('错题集暂无数据!', '提示', { |
| | |
| | | }) |
| | | .then(() => { |
| | | examination.submitStatus = true |
| | | examination.dialogVisible = false |
| | | }) |
| | | .catch(() => {}) |
| | | .catch(() => { |
| | | examination.dialogVisible = false |
| | | }) |
| | | } |
| | | }) |
| | | } |
| | |
| | | } |
| | | } |
| | | examination.loading = false |
| | | return cardList.filter((item) => item.infoList.length > 0) |
| | | return cardList |
| | | } |
| | | // 错题集模式下,获取假的错题(json) |
| | | const getJsonError = async () => { |
| | | if (!props.activeBook.jsonQUestion) { |
| | | examination.cardList = examination.cardList.filter((item) => item.infoList.length > 0) |
| | | return false |
| | | } |
| | | let questionArr = [] |
| | | let jsonCollectList = [] |
| | | for (let index = 0; index < props.activeBook.jsonQUestion.length; index++) { |
| | | const item = props.activeBook.jsonQUestion[index] |
| | | const res = await axios.get(props.activeBook.resourceUrl + '/question-' + item + '.json') |
| | | questionArr.push(...res.data.data) |
| | | } |
| | | for (let index = 0; index < questionArr.length; index++) { |
| | | const item = questionArr[index] |
| | | for (let cindex = 0; cindex < examination.allError[1].errorList.length; cindex++) { |
| | | const citem = examination.allError[1].errorList[cindex] |
| | | if (item.id == citem) { |
| | | item.isCollect = examination.allCollect[1].collectList.indexOf(item.id) > -1 ? true :false |
| | | item.isJson = true |
| | | jsonCollectList.push(item) |
| | | } |
| | | } |
| | | } |
| | | |
| | | for (let index = 0; index < jsonCollectList.length; index++) { |
| | | const item = jsonCollectList[index] |
| | | if (item.type && item.type == 'material') { |
| | | examination.cardList.push(item) |
| | | } else if (item.questionType == 'singleChoice') { |
| | | examination.cardList[0].infoList.push(item) |
| | | } else if (item.questionType == 'judge') { |
| | | examination.cardList[1].infoList.push(item) |
| | | } else if (item.questionType == 'multipleChoice') { |
| | | examination.cardList[2].infoList.push(item) |
| | | } else if (item.questionType == 'completion') { |
| | | examination.cardList[3].infoList.push(item) |
| | | } else if (item.questionType == 'shortAnswer') { |
| | | examination.cardList[4].infoList.push(item) |
| | | } |
| | | } |
| | | examination.cardList = examination.cardList.filter((item) => item.infoList.length > 0) |
| | | } |
| | | // 批改题目 (练习,我的做题,我的收藏模式下) |
| | | const handleQuestion = () => { |
| | | const handleQuestion = () => { |
| | | for (let index = 0; index < examination.cardList.length; index++) { |
| | | const item = examination.cardList[index] |
| | | for (let cindex = 0; cindex < item.infoList.length; cindex++) { |
| | |
| | | } |
| | | } |
| | | if (!citem.isRight && citem.questionType != 'shortAnswer') { |
| | | |
| | | // 客观题回答错误 记录错题 |
| | | if (examination.errorList.findIndex((errorItem) => errorItem == citem.id) == -1) { |
| | | examination.errorList.push(citem.id) |
| | | if (citem.isJson) { |
| | | if ( |
| | | examination.allError[1].errorList.findIndex((erroritem) => erroritem == citem.id) == -1 |
| | | ) { |
| | | examination.allError[1].errorList.push(citem.id) |
| | | } |
| | | } else { |
| | | if (examination.errorList.findIndex((errorItem) => errorItem == citem.id) == -1) { |
| | | examination.errorList.push(citem.id) |
| | | } |
| | | } |
| | | } else { |
| | | if (props.type == 'errorQuestion' || props.type == 'option') { |
| | | // 从错题集中移除 |
| | | let index = examination.errorList.findIndex((erroritem) => erroritem == citem.id) |
| | | if (index > -1) { |
| | | examination.errorList.splice(index, 1) |
| | | if (citem.isJson) { |
| | | let index = examination.allError[1].errorList.findIndex( |
| | | (erroritem) => erroritem == citem.id |
| | | ) |
| | | if (index > -1) { |
| | | examination.allError[1].errorList.splice(index, 1) |
| | | } |
| | | } else { |
| | | let index = examination.errorList.findIndex((erroritem) => erroritem == citem.id) |
| | | if (index > -1) { |
| | | examination.errorList.splice(index, 1) |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | if (props.type == 'option') { |
| | | recordAnswerData() |
| | | } |
| | | console.log('提交错题',examination.errorList,examination.allError); |
| | | |
| | | } |
| | | // 处理答题数据 |
| | | const recordAnswerData = () => { |
| | |
| | | console.log('保存的数据', infoData) |
| | | setAnswerInfo(infoData) |
| | | } |
| | | // 获取用户旧答题数据 |
| | | // 未提交保存答案方法 |
| | | const saveAnswerData = () => { |
| | | let arr = [] |
| | | for (let index = 0; index < examination.cardList.length; index++) { |
| | | const item = examination.cardList[index]; |
| | | for (let cindex = 0; cindex < item.infoList.length; cindex++) { |
| | | const citem = item.infoList[cindex]; |
| | | if(citem.userAnswer && citem.userAnswer.length) { |
| | | arr.push({ |
| | | id:citem.id, |
| | | userAnswer:citem.userAnswer |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | console.log('用户答案',arr); |
| | | setUserAnswer(arr) |
| | | } |
| | | // 未提交退出答题,保存用户答案 |
| | | const setUserAnswer = (data) => { |
| | | MG.identity |
| | | .setUserKey({ |
| | | setKeyRequests: [ |
| | | { |
| | | domain: 'beforeAnswerData', |
| | | key: props.info.id, |
| | | value: JSON.stringify(data) |
| | | } |
| | | ] |
| | | }) |
| | | .then((res) => { |
| | | console.log('提交用户答题数据成功') |
| | | }) |
| | | } |
| | | // 获取未提交退出答题的用户答案 |
| | | const getUserAnswer = async() => { |
| | | let data |
| | | await MG.identity |
| | | .getUserKey({ |
| | | domain: 'beforeAnswerData', |
| | | keys: [props.info.id] |
| | | }) |
| | | .then((res) => { |
| | | if(res) { |
| | | data = JSON.parse(res[0].value) |
| | | } |
| | | }) |
| | | return data |
| | | } |
| | | // 获取用户旧答题数据(提交后) |
| | | const getAnswerInfo = (callback) => { |
| | | MG.identity |
| | | .getUserKey({ |
| | |
| | | console.log('收藏/取消成功') |
| | | }) |
| | | } |
| | | const clearError = () => { |
| | | MG.identity |
| | | .setUserKey({ |
| | | setKeyRequests: [ |
| | | { |
| | | domain: 'errorData', |
| | | key: props.activeBook.bookId, |
| | | value: JSON.stringify([]) |
| | | } |
| | | ] |
| | | }) |
| | | .then((res) => { |
| | | console.log('错题已保存', examination.allError) |
| | | }) |
| | | } |
| | | defineExpose({ handleExaminationDialog }) |
| | | </script> |
| | | |