| | |
| | | import { getPublicImage } from '../../../assets/js/middleGround/tool' |
| | | const app = getApp() |
| | | Page({ |
| | | |
| | |
| | | navBarHeight: "", |
| | | loading: false, |
| | | answerTitle: "", // 导航栏标题 |
| | | countdownInterval: null, // 计时器 |
| | | isCountdownRunning: true, // 是否倒计时 |
| | | countdownTime: 0, // 倒计时时间 |
| | | bookId: "", |
| | | productLinkPath: "", |
| | | rootCmsItemId: "", |
| | | idPathList: [], // 题目列表 |
| | | answerType: "", // 答题类型 |
| | | answerType: "", // 答题模式 |
| | | submitStatus: false, // 提交状态 |
| | | currentIndex: 0, // 当前答题数 |
| | | currentIndex: 0, // 当前显示的题号 |
| | | collectList: [], // 收藏题目列表 |
| | | subjectiveNum: 0, // 主观题得分 |
| | | subjectiveGrade: 0, // 主观题总分 |
| | | total: 0, // 题目总数 |
| | | errorList: [], // 错题列表 |
| | | subjectiveTotal: 0, // 客观题总数 |
| | | subjectiveNum: 0, // 客观题得分 |
| | | subjectiveGrade: 0, // 客观题总分 |
| | | correctNum: 0, // 正确题目数量 |
| | | total: 0, // 题目总数 |
| | | cardList: [], // 提交项, |
| | | questionDataList: [] |
| | | questionDataList: [], // 显示题目列表 |
| | | }, |
| | | |
| | | /** |
| | |
| | | navBarHeight: navBarHeight, |
| | | answerTitle: options.answerTitle, |
| | | bookId: options.bookId, |
| | | productLinkPath: options.productLinkPath, |
| | | productLinkPath: options.productLinkPath ? options.productLinkPath : '', |
| | | rootCmsItemId: options.rootCmsItemId, |
| | | idPathList: JSON.parse(options.idPathList), |
| | | idPathList: options.idPathList ? JSON.parse(options.idPathList) : [], |
| | | answerType: options.answerType |
| | | }); |
| | | this.init() |
| | | console.log('传参', options); |
| | | }, |
| | | |
| | | /** |
| | |
| | | * 生命周期函数--监听页面卸载 |
| | | */ |
| | | onUnload() { |
| | | |
| | | if (this.data.countdownInterval !== null) { |
| | | clearInterval(this.data.countdownInterval) |
| | | } |
| | | }, |
| | | |
| | | /** |
| | |
| | | goBack() { |
| | | wx.navigateBack(); |
| | | }, |
| | | |
| | | // 获取保存的倒计时时间 |
| | | getSavedTime() { |
| | | const savedTime = wx.getStorageSync('countdownTime') |
| | | return savedTime ? parseInt(savedTime) : null |
| | | }, |
| | | // 保存倒计时时间到本地存储 |
| | | saveTime() { |
| | | wx.setStorageSync('countdownTime', this.data.countdownTime.toString()) |
| | | }, |
| | | clearTime() { |
| | | this.setData({ |
| | | countdownTime: 2 * 60 * 60 * 1000 |
| | | }) |
| | | }, |
| | | // 暂停或继续倒计时 |
| | | toggleCountdown() { |
| | | if (this.data.countdownInterval) { |
| | | clearInterval(this.data.countdownInterval) |
| | | this.setData({ |
| | | countdownInterval: null, |
| | | isCountdownRunning: false |
| | | }) |
| | | } else { |
| | | this.startCountdown() |
| | | this.setData({ |
| | | isCountdownRunning: true |
| | | }) |
| | | } |
| | | }, |
| | | // 开始倒计时 |
| | | startCountdown() { |
| | | // 如果计时器已经存在,先清除之前的计时器 |
| | | if (this.data.countdownInterval) { |
| | | clearInterval(this.data.countdownInterval) |
| | | this.setData({ |
| | | countdownInterval: null |
| | | }) |
| | | } |
| | | this.setData({ |
| | | countdownInterval: setInterval(() => { |
| | | this.setData({ |
| | | countdownTime: this.data.countdownTime - 1000 |
| | | }) |
| | | if (this.data.countdownTime <= 0) { |
| | | clearInterval(this.data.countdownInterval) |
| | | this.setData({ |
| | | countdownTime: 0, |
| | | isCountdownRunning: false |
| | | }) |
| | | } |
| | | this.saveTime() |
| | | }, 1000) |
| | | }) |
| | | }, |
| | | // 切换题目 |
| | | changeSwiper(e) { |
| | | this.setData({ |
| | | currentIndex: e.detail.index |
| | | }) |
| | | let index = e.detail.index - 1 >= 0 ? e.detail.index - 1 : 0 |
| | | let flag = this.isHaveAnswer(this.data.questionDataList[index].userAnswer) |
| | | if (flag) this.handleQuestion(e.detail.index) |
| | | |
| | | }, |
| | | // 点击答题卡跳转题目 |
| | | goQuestion(e) { |
| | | console.log(e); |
| | | const id = e.detail.id |
| | | this.data.questionDataList.forEach((item, index) => { |
| | | if (item.id == id) { |
| | | this.setData({ |
| | | currentIndex: index |
| | | }) |
| | | } |
| | | }) |
| | | }, |
| | | // 单选 多选 触发 |
| | | onChangeRadio(e) { |
| | | const radioData = e.detail.value.currentTarget.dataset.value |
| | | const id = e.detail.value.currentTarget.dataset.id |
| | | const radioChecked = e.detail.value.detail.value |
| | | const questionList = this.data.questionDataList |
| | | questionList.forEach(item => { |
| | | if (item.id == id) { |
| | | item.userAnswer = radioChecked |
| | | } |
| | | }) |
| | | this.setData({ |
| | | questionDataList: questionList |
| | | }) |
| | | console.log(this.data.questionDataList); |
| | | }, |
| | | // 输入框触发 |
| | | onChangeInput(e) { |
| | | const inputData = e.detail.value.detail.value |
| | | const id = e.detail.value.currentTarget.dataset.id |
| | | const index = e.detail.value.currentTarget.dataset.index |
| | | const questionList = this.data.questionDataList |
| | | questionList.forEach(item => { |
| | | if (item.id == id) { |
| | | item.userAnswer[index] = inputData |
| | | } |
| | | }) |
| | | this.setData({ |
| | | questionDataList: questionList |
| | | }) |
| | | console.log(this.data.questionDataList); |
| | | }, |
| | | // 数组转为字符串方法 |
| | | arrayToString(data) { |
| | | // 检查是否为数组 |
| | | if (Array.isArray(data)) { |
| | | // 使用 join 方法将数组转换为字符串,默认使用逗号分隔 |
| | | return data.join(',').replace(/<[^>]*>/g, '') |
| | | } else { |
| | | // 如果不是数组,直接返回原始值 |
| | | return data.replace(/<[^>]*>/g, '') |
| | | } |
| | | }, |
| | | // 判断是否有用户答案 |
| | | isHaveAnswer(data) { |
| | | if (typeof data == 'string') { |
| | | data = data |
| | | .replace(/<[^>]*>/g, '') |
| | | .replace(/ /g, '') |
| | | .trim() |
| | | if (data.length) { |
| | | return true |
| | | } else { |
| | | return false |
| | | } |
| | | } else { |
| | | const answer = data.find((item) => item.length > 0) |
| | | if (answer) { |
| | | return true |
| | | } else { |
| | | return false |
| | | } |
| | | } |
| | | }, |
| | | // 提交逻辑 |
| | | submitPaper() { |
| | | this.setData({ |
| | | submitStatus: true |
| | | }) |
| | | if (this.data.answerType == 'option') { |
| | | this.toggleCountdown() |
| | | const child = this.selectComponent('#question-options') |
| | | if (this.data.answerType == 'option' || this.data.answerType == 'errorQuestion') { |
| | | // 先遍历所有题目,将未批改的题目批改 |
| | | const qustionList = this.data.questionDataList |
| | | for (let index = 0; index < qustionList.length; index++) { |
| | | const item = qustionList[index]; |
| | | if (!item.isComplete) this.handleQuestion(index + 1) |
| | | } |
| | | } |
| | | if (this.data.answerType == 'option') { |
| | | this.recordAnswerData() |
| | | child.openTestReportDialog() |
| | | } |
| | | } else if (this.data.answerType == 'collectQuestion' || this.data.answerType == 'errorQuestion') { |
| | | this.goBack() |
| | | } |
| | | |
| | | }, |
| | | // 初始化函数 |
| | | async init() { |
| | | this.setData({ |
| | | loading: true, |
| | | subjectiveTotal: 0, |
| | | subjectiveNum: 0, |
| | | subjectiveGrade: 0 |
| | | }) |
| | | if (this.data.answerType == 'option') { |
| | | if (this.data) |
| | | this.startCountdown() |
| | | this.setData({ |
| | | countdownTime: 2 * 60 * 60 * 1000 |
| | | }) |
| | | // 测试答题 |
| | | await this.getCollectIdList() // 获取收藏id列表 |
| | | // await getErrorList() // 获取错题id列表 |
| | | await this.getErrorList() // 获取错题id列表 |
| | | } else if (this.data.answerType == 'collectQuestion') { |
| | | // 我的收藏 |
| | | await this.getcollectId() // 获取收藏题目 |
| | | } else if (this.data.answerType == 'errorQuestion') { |
| | | // 我的错题 |
| | | // loadings.value = true |
| | | await this.getErrorIdList() |
| | | await this.getCollectIdList() // 获取收藏id列表 |
| | | } |
| | | }, |
| | | async restart() { |
| | | const countDownRef = this.selectComponent('#countDownRef') |
| | | this.setData({ |
| | | loading: true, |
| | | total: 0, |
| | | subjectiveGrade: 0, |
| | | subjectiveTotal: 0, |
| | | subjectiveNum: 0, |
| | | currentIndex: 0, |
| | | submitStatus: false |
| | | }) |
| | | if (this.data.answerType == 'option') { |
| | | this.setData({ |
| | | countdownTime: 2 * 60 * 60 * 1000 |
| | | }) |
| | | this.delAnswerInfo(() => { |
| | | this.getQuestionList() |
| | | this.clearTime() |
| | | }) |
| | | if (!this.data.submitStatus) { |
| | | this.startCountdown() |
| | | } |
| | | } else if (this.data.answerType == 'mock') { |
| | | // 组卷模式 |
| | | // 清空答题记录 |
| | | await app.MG.identity.setUserKey({ |
| | | setKeyRequests: [ |
| | | { |
| | | domain: 'mockAnswerData', |
| | | key: route.query.uuid, |
| | | value: JSON.stringify({ |
| | | time: countDownRef.value.countdownTime, |
| | | answerData: [] |
| | | }) |
| | | } |
| | | ] |
| | | }) |
| | | this.init() |
| | | } else { |
| | | this.init() |
| | | this.clearTime() |
| | | if (submitStatus.value) { |
| | | this.startCountdown() |
| | | } |
| | | } |
| | | }, |
| | | // 获取收藏题目列表id |
| | |
| | | domain: 'collectData', |
| | | keys: [this.data.rootCmsItemId] |
| | | }) |
| | | .then(async (res) => { |
| | | .then((res) => { |
| | | try { |
| | | this.setData({ |
| | | collectList: JSON.parse(res[0].value) |
| | |
| | | } |
| | | if (this.data.answerType == 'option') { |
| | | // 先获取用户答题记录 |
| | | await this.getAnswerInfo((res) => { |
| | | this.getAnswerInfo(async (res) => { |
| | | if (res.length) { |
| | | // 有记录,不能答题,状态设为已提交 |
| | | this.setData({ |
| | | submitStatus: true |
| | | }) |
| | | let value = JSON.parse(res[0].value) |
| | | // console.log('答题记录', JSON.parse(res[0].value)) |
| | | // 有答题记录,得分赋值 |
| | | if (value) { |
| | | this.setData({ |
| | | submitStatus: true |
| | | }) |
| | | value.dataList.forEach((item) => { |
| | | if (item.name == '客观题得分' && item.path == this.data.productLinkPath) |
| | | this.setData({ |
| | |
| | | currentIndex: value.currentIndex |
| | | }) |
| | | // 携带答题记录 获取题目 |
| | | this.getQuestionList(value.dataList) |
| | | await this.getQuestionList(value.dataList) |
| | | } else { |
| | | this.getQuestionList() // 获取题库题目 |
| | | await this.getQuestionList() // 获取题库题目 |
| | | } |
| | | }) |
| | | } |
| | | }) |
| | | }, |
| | | // 获取错题id列表 |
| | | getErrorList() { |
| | | app.MG.identity |
| | | .getUserKey({ |
| | | domain: 'errorData', |
| | | keys: [this.data.rootCmsItemId] |
| | | }) |
| | | .then((res) => { |
| | | try { |
| | | this.setData({ |
| | | errorList: JSON.parse(res[0].value) |
| | | }) |
| | | } catch (error) { |
| | | |
| | | } |
| | | }) |
| | | }, |
| | |
| | | getQuestionList(oldData) { |
| | | // 清空正确题数记录 |
| | | this.setData({ |
| | | correctNum: 0 |
| | | cardList: [], |
| | | correctNum: 0, |
| | | }) |
| | | let flag = 0 |
| | | this.data.idPathList.forEach((pathitem) => { |
| | | const pathList = this.data.cardList |
| | | pathList.push({ |
| | | name: pathitem.name, |
| | | path: pathitem.productLinkPath, |
| | | catalogName: pathitem.type, |
| | | catalogName: pathitem.name, |
| | | infoList: [] |
| | | }) |
| | | this.setData({ |
| | | cardList: pathList |
| | | }) |
| | | // 获取题目 |
| | | let questionArr = [] |
| | | let query = { |
| | | path: '*', |
| | | queryType: '*', |
| | |
| | | let questionObj = { |
| | | // num: index, // 题号 |
| | | id: item.id, |
| | | type: pathitem.name, |
| | | stem: |
| | | item.Embedded_QuestionBank_QuestionType == 'completion' |
| | | ? JSON.parse(item.Embedded_QuestionBank_Stem) |
| | |
| | | questionObj.answer = item.Embedded_QuestionBank_Answer |
| | | } |
| | | } |
| | | // questionObj.userAnswer = this.arrayToString(questionObj.userAnswer) |
| | | // questionObj.isHaveAnswer = this.isHaveAnswer(questionObj.userAnswer) |
| | | // 填空题改造 |
| | | if (questionObj.questionType == 'completion') { |
| | | let index = 0 |
| | |
| | | } |
| | | } |
| | | } |
| | | questionArr.push(questionObj) |
| | | // 获取图片 |
| | | if (questionObj.stemStyle == 'Image' || questionObj.stemStyle == 'TxtAndImage') { |
| | | questionObj.stem.stemImage = getPublicImage(questionObj.stem.stemImage, 150) |
| | | } |
| | | if (questionObj.optionStyle == 'Image' || questionObj.optionStyle == 'TxtAndImage') { |
| | | questionObj.option.forEach(optionItem => { |
| | | if (optionItem.img) optionItem.img = getPublicImage(optionItem.img, 150) |
| | | }) |
| | | } |
| | | // if (questionObj.optionStyle == 'RichText') { |
| | | // questionObj.option.forEach(optionItem => { |
| | | // optionItem.txt.replace(/<img>/g, "<img class='imgClass'>") |
| | | // }) |
| | | // } |
| | | // 旧数据里 题目已经作答,修改已答题目数量 |
| | | // if (oldObj && oldObj.userAnswer.length > 0) countDownRef.value.changeAlready() |
| | | // 旧数据里 题目正确 记录正确数量 |
| | |
| | | correctNum: this.data.correctNum + 1 |
| | | }) |
| | | } |
| | | // if (pathitem.name == '判断题') { |
| | | // topicList.value.judge.data = questionArr |
| | | // topicList.value.judge.path = pathitem.productLinkPath |
| | | // if (oldData) subjectiveTotal.value += 1 // 有旧数据,计算主观题数 |
| | | // } else if (pathitem.name == '填空题') { |
| | | // topicList.value.gap.data = questionArr |
| | | // topicList.value.gap.path = pathitem.productLinkPath |
| | | // if (oldData) subjectiveTotal.value += 1 |
| | | // } else if (pathitem.name == '多选题') { |
| | | // topicList.value.check.data = questionArr |
| | | // topicList.value.check.path = pathitem.productLinkPath |
| | | // if (oldData) subjectiveTotal.value += 1 |
| | | // } else if (pathitem.name == '单选题') { |
| | | // topicList.value.radio.data = questionArr |
| | | // topicList.value.radio.path = pathitem.productLinkPath |
| | | // if (oldData) subjectiveTotal.value += 1 |
| | | // } else if (pathitem.name == '简答题') { |
| | | // topicList.value.short.data = questionArr |
| | | // topicList.value.short.path = pathitem.productLinkPath |
| | | // } else if (pathitem.name == '翻译题') { |
| | | // topicList.value.translate.data = questionArr |
| | | // topicList.value.translate.path = pathitem.productLinkPath |
| | | // } else if (pathitem.name == '听力题') { |
| | | // topicList.value.listen.data = questionArr |
| | | // topicList.value.listen.path = pathitem.productLinkPath |
| | | // if (oldData) subjectiveTotal.value += 1 |
| | | // } |
| | | let infoList = |
| | | this.data.cardList[this.data.cardList.findIndex((item) => item.path == pathitem.productLinkPath)] |
| | | .infoList |
| | | if (pathitem.name == '判断题' || pathitem.name == '填空题' || pathitem.name == '多选题' || pathitem.name == '单选题' || pathitem.name == '听力题') { |
| | | if (oldObj) { |
| | | this.setData({ |
| | | subjectiveTotal: this.data.subjectiveTotal + 1 |
| | | }) |
| | | } |
| | | |
| | | } |
| | | // cardList赋值 |
| | | let cardIndex = this.data.cardList.findIndex((item) => item.path == pathitem.productLinkPath) |
| | | let infoList = this.data.cardList[cardIndex].infoList |
| | | infoList.push(questionObj) |
| | | this.setData({ |
| | | [`cardList[${cardIndex}].infoList`]: infoList |
| | | }) |
| | | // this.data.cardList[this.data.cardList.findIndex((item) => item.path == pathitem.productLinkPath)] |
| | | // .infoList |
| | | // infoList.push(questionObj) |
| | | flag++; |
| | | let questionList = [] |
| | | const cardUpdatedList = this.data.cardList |
| | | // if (flag == this.data.idPathList.length) { |
| | | this.data.cardList.forEach(aitem => { |
| | | aitem.infoList.forEach(bitem => { |
| | | cardUpdatedList.forEach(aitem => { |
| | | aitem.infoList.forEach((bitem, bindex) => { |
| | | questionList.push(bitem) |
| | | bitem.number = questionList.length |
| | | bitem.number = bindex + 1 |
| | | bitem.grade = 2 |
| | | }) |
| | | }) |
| | | this.setData({ |
| | | questionDataList: questionList |
| | | questionDataList: questionList, |
| | | cardList: cardUpdatedList |
| | | }) |
| | | // } |
| | | }) |
| | | }) |
| | | }) |
| | | this.setData({ |
| | | loading: false, |
| | | }) |
| | | console.log('题目列表', this.data.questionDataList, this.data.cardList); |
| | | }, |
| | | // 批改题目 (练习,我的错题,我的收藏) |
| | | handleQuestion(num) { |
| | | const questionList = this.data.questionDataList |
| | | const index = num - 1 >= 0 ? num - 1 : 0 |
| | | if (questionList[index].isComplete) { |
| | | // 题目已完成,跳过 |
| | | return true |
| | | } |
| | | questionList[index].isComplete = true |
| | | const item = questionList[index] |
| | | // 批改题目 |
| | | if (item.questionType == 'multipleChoice') { |
| | | // 多选题 |
| | | // subjectiveGrade.value += item.score |
| | | if (item.answer.length == item.userAnswer.length) { |
| | | const sortedArr1 = item.answer.slice().sort() |
| | | const sortedArr2 = item.userAnswer.slice().sort() |
| | | questionList[index].isRight = sortedArr1.every( |
| | | (value, valueIndex) => value === sortedArr2[valueIndex] |
| | | ) |
| | | } else { |
| | | questionList[index].isRight = false |
| | | } |
| | | } else if (item.questionType == 'singleChoice' || item.questionType == 'judge') { |
| | | // 单选 判断 |
| | | // subjectiveGrade.value += item.score |
| | | questionList[index].isRight = item.answer == item.userAnswer |
| | | } else if (item.questionType == 'shortAnswer') { |
| | | // 简答 翻译 |
| | | questionList[index].isRight = null |
| | | } else if (item.questionType == 'completion') { |
| | | // 填空 |
| | | // subjectiveGrade.value += item.score |
| | | if (typeof item.answer == 'string') { |
| | | questionList[index].isRight = item.answer == item.userAnswer[0] |
| | | } else { |
| | | if (item.answer.length != item.userAnswer.length) { |
| | | questionList[index].isRight = false |
| | | } else { |
| | | questionList[index].isRight = item.answer.every( |
| | | (value, valueIndex) => value === item.userAnswer[valueIndex] |
| | | ) |
| | | } |
| | | } |
| | | } |
| | | if (item.questionType != 'shortAnswer') { |
| | | this.setData({ |
| | | subjectiveTotal: this.data.subjectiveTotal + 1, |
| | | subjectiveGrade: this.data.subjectiveGrade + item.grade |
| | | }) |
| | | } |
| | | if (questionList[index].isRight && item.questionType != 'shortAnswer') { |
| | | // 客观题回答正确 |
| | | this.setData({ |
| | | subjectiveNum: this.data.subjectiveNum + item.grade, |
| | | correctNum: this.data.correctNum + 1 |
| | | }) |
| | | } |
| | | if (!questionList[index].isRight && item.questionType != 'shortAnswer') { |
| | | // 客观题回答错误 记录错题 |
| | | if (this.data.errorList.findIndex((errorItem) => errorItem == item.id) == -1) { |
| | | this.data.errorList.push(item.id) |
| | | } |
| | | } else { |
| | | if (this.data.answerType == 'errorQuestion' || this.data.answerType == 'option') { |
| | | // 从错题集中移除 |
| | | let errorIndex = this.data.errorList.findIndex((erroritem) => erroritem == item.id) |
| | | if (errorIndex > -1) { |
| | | this.data.errorList.splice(errorIndex, 1) |
| | | } |
| | | } |
| | | } |
| | | if (this.data.answerType != 'collectQuestion') { |
| | | // 记录错题 |
| | | app.MG.identity |
| | | .setUserKey({ |
| | | setKeyRequests: [ |
| | | { |
| | | domain: 'errorData', |
| | | key: this.data.rootCmsItemId, |
| | | value: JSON.stringify(this.data.errorList) |
| | | } |
| | | ] |
| | | }) |
| | | .then((res) => { |
| | | console.log(res) |
| | | }) |
| | | } |
| | | this.setData({ |
| | | questionDataList: questionList |
| | | }) |
| | | const cardUpdatedList = this.data.cardList |
| | | cardUpdatedList.forEach((item) => { |
| | | item.infoList.forEach((citem) => { |
| | | if (citem.id == questionList[index].id) { |
| | | citem = questionList[index]; |
| | | } |
| | | }); |
| | | }); |
| | | this.setData({ |
| | | cardList: cardUpdatedList |
| | | }) |
| | | // console.log(this.data.questionDataList, this.data.cardList); |
| | | }, |
| | | // 题目收藏按钮,收藏和取消同一接口,取消数组减去该项id |
| | | setCollect() { |
| | | const citem = this.data.questionDataList[this.data.currentIndex] |
| | | const questionList = this.data.questionDataList |
| | | for (let index = 0; index < questionList.length; index++) { |
| | | const item = questionList[index]; |
| | | if (item.id == citem.id) { |
| | | item.isCollect = !item.isCollect |
| | | } |
| | | } |
| | | this.setData({ |
| | | questionDataList: questionList |
| | | }) |
| | | if (this.data.collectList.length == 0) { |
| | | this.setData({ |
| | | collectList: [citem.id] |
| | | }) |
| | | } else { |
| | | const collectItme = this.data.collectList.filter((item) => item == citem.id) |
| | | if (collectItme.length) { |
| | | const arr = this.data.collectList.filter((item) => item != citem.id) |
| | | this.setData({ |
| | | collectList: arr |
| | | }) |
| | | } else { |
| | | const collectArr = this.data.collectList |
| | | collectArr.push(citem.id) |
| | | this.setData({ |
| | | collectList: collectArr |
| | | }) |
| | | } |
| | | } |
| | | app.MG.identity |
| | | .setUserKey({ |
| | | setKeyRequests: [ |
| | | { |
| | | domain: 'collectData', |
| | | key: this.data.rootCmsItemId, |
| | | value: JSON.stringify(this.data.collectList) |
| | | } |
| | | ] |
| | | }) |
| | | .then((res) => { }) |
| | | }, |
| | | // 处理答题数据 |
| | | recordAnswerData() { |
| | | this.data.cardList.push( |
| | | { |
| | | name: '客观题得分', |
| | | score: this.data.subjectiveNum, |
| | | path: this.data.productLinkPath, |
| | | // infoList: [], |
| | | // catalogName: '' |
| | | } |
| | | ) |
| | | let setInfoData = { |
| | | currentIndex: this.data.currentIndex, |
| | | dataList: JSON.parse(JSON.stringify(this.data.cardList)) |
| | | } |
| | | for (let i = 0; i < setInfoData.dataList.length; i++) { |
| | | const item = setInfoData.dataList[i] |
| | | if (!item.name && !item.name == '客观题得分') { |
| | | for (let j = 0; j < item.infoList.length; j++) { |
| | | let obj = { |
| | | id: item.infoList[j].id, |
| | | userAnswer: item.infoList[j].userAnswer, |
| | | isComplete: item.infoList[j].isComplete, |
| | | isRight: item.infoList[j].isRight, |
| | | isCollect: item.infoList[j].isCollect |
| | | } |
| | | item.infoList[j] = obj |
| | | } |
| | | } |
| | | } |
| | | |
| | | this.setAnswerInfo(setInfoData) |
| | | }, |
| | | // 提交答题数据 |
| | | setAnswerInfo(data) { |
| | | app.MG.identity |
| | | .setUserKey({ |
| | | setKeyRequests: [ |
| | | { |
| | | domain: 'answerData', |
| | | key: this.data.productLinkPath, |
| | | value: JSON.stringify(data) |
| | | } |
| | | ] |
| | | }) |
| | | .then((res) => { }) |
| | | }, |
| | | // 获取答题数据 |
| | | getAnswerInfo(callback) { |
| | |
| | | .then((res) => { |
| | | if (callback) callback(res) |
| | | }) |
| | | }, |
| | | // 删除答题数据 |
| | | delAnswerInfo(callback) { |
| | | app.MG.identity |
| | | .delUserKey({ |
| | | domain: 'answerData', |
| | | keys: [this.data.productLinkPath] |
| | | }) |
| | | .then((res) => { |
| | | if (callback) callback() |
| | | }) |
| | | }, |
| | | // 我的收藏模式下获取收藏题目id |
| | | async getcollectId() { |
| | | app.MG.identity |
| | | .getUserKey({ |
| | | domain: 'collectData', |
| | | keys: [this.data.rootCmsItemId] |
| | | }) |
| | | .then(async (res) => { |
| | | try { |
| | | this.setData({ |
| | | collectList: JSON.parse(res[0].value) |
| | | }) |
| | | // total.value = collectList.value.length |
| | | } catch (error) { |
| | | } |
| | | if (this.data.collectList && this.data.collectList.length) { |
| | | await this.getCollectDataList() |
| | | } else { |
| | | this.setData({ |
| | | loading: false |
| | | }) |
| | | wx.showModal({ |
| | | title: '提示', |
| | | content: '收藏夹暂无数据',//editable如果为true,这就是输入框的内容 |
| | | editable: false,//是否显示输入框 |
| | | showCancel: false, |
| | | success: (res) => { |
| | | if (res.confirm) { |
| | | this.setData({ |
| | | submitStatus: true |
| | | }) |
| | | this.goBack() |
| | | } |
| | | |
| | | } |
| | | }) |
| | | } |
| | | // console.log('收藏', collectList.value) |
| | | }) |
| | | }, |
| | | // 获取收藏夹 |
| | | async getCollectDataList() { |
| | | let questionArr = [] |
| | | this.setData({ |
| | | cardList: [ |
| | | { |
| | | catalogName: '收藏夹', |
| | | infoList: [] |
| | | } |
| | | ] |
| | | }) |
| | | let query = { |
| | | path: '*', |
| | | cmsPath: this.data.rootCmsItemId, |
| | | cmsType: '*', |
| | | productId: this.data.bookId, |
| | | queryType: '*', |
| | | itemIds: this.data.collectList.map((item) => item + ''), |
| | | itemFields: { |
| | | Embedded_QuestionBank_Stem: [], |
| | | Embedded_QuestionBank_AnalysisCon: [], |
| | | Embedded_QuestionBank_Answer: [], |
| | | Embedded_QuestionBank_Option: [], |
| | | Embedded_QuestionBank_QuestionType: [], |
| | | Embedded_QuestionBank_StemStyle: [], |
| | | Embedded_QuestionBank_OptionStyle: [], |
| | | Embedded_QuestionBank_KnowledgePoint: [], |
| | | Embedded_QuestionBank_Difficulty: [] |
| | | } |
| | | } |
| | | app.MG.store.getProductDetail(query).then((res) => { |
| | | let questionArr = [] |
| | | res.datas.cmsDatas[0].datas.forEach((item, index) => { |
| | | const questionObj = { |
| | | number: index + 1, // 题号 |
| | | id: item.id, |
| | | stem: |
| | | item.Embedded_QuestionBank_QuestionType == 'completion' |
| | | ? JSON.parse(item.Embedded_QuestionBank_Stem) |
| | | .stemTxt.replaceAll('<vacancy>', ',input,') |
| | | .split(',') |
| | | : JSON.parse(item.Embedded_QuestionBank_Stem), // 题干 |
| | | answer: item.Embedded_QuestionBank_Answer, // 答案 |
| | | option: item.Embedded_QuestionBank_Option |
| | | ? JSON.parse(item.Embedded_QuestionBank_Option) |
| | | : '', // 选择题选项 |
| | | analysisCon: item.Embedded_QuestionBank_AnalysisCon, // 解析 |
| | | questionType: item.Embedded_QuestionBank_QuestionType, // 题型 |
| | | optionStyle: item.Embedded_QuestionBank_OptionStyle, // 选项显示类型 |
| | | stemStyle: item.Embedded_QuestionBank_StemStyle, // 题干显示类型 |
| | | difficulty: item.Embedded_QuestionBank_Difficulty |
| | | ? 4 - item.Embedded_QuestionBank_Difficulty |
| | | : 0, // 难度等级 |
| | | userAnswer: |
| | | item.Embedded_QuestionBank_QuestionType == 'completion' || |
| | | item.Embedded_QuestionBank_QuestionType == 'multipleChoice' |
| | | ? [] |
| | | : '', |
| | | isSubmit: false, // 查看解析 |
| | | isRight: null, // 是否正确 |
| | | isComplete: false, |
| | | isCollect: true |
| | | } |
| | | // 多选和填空答案肯为数组,要转换JSON格式 |
| | | if ( |
| | | questionObj.questionType == 'completion' || |
| | | questionObj.questionType == 'multipleChoice' |
| | | ) { |
| | | try { |
| | | questionObj.answer = JSON.parse(questionObj.answer) |
| | | } catch (error) { |
| | | // |
| | | } |
| | | } |
| | | // 填空题改造 |
| | | if (questionObj.questionType == 'completion') { |
| | | let index = 0 |
| | | for (let i = 0; i < questionObj.stem.length; i++) { |
| | | const item = questionObj.stem[i] |
| | | if (item == 'input') { |
| | | questionObj.stem[i] = { |
| | | num: index, |
| | | data: 'input' |
| | | } |
| | | questionObj.userAnswer[index] = '' |
| | | index++ |
| | | } |
| | | } |
| | | } |
| | | // 获取图片 |
| | | if (questionObj.stemStyle == 'Image' || questionObj.stemStyle == 'TxtAndImage') { |
| | | questionObj.stem.stemImage = getPublicImage(questionObj.stem.stemImage, 150) |
| | | } |
| | | if (questionObj.optionStyle == 'Image' || questionObj.optionStyle == 'TxtAndImage') { |
| | | questionObj.option.forEach(optionItem => { |
| | | if (optionItem.img) optionItem.img = getPublicImage(optionItem.img, 150) |
| | | }) |
| | | } |
| | | // if (item.Embedded_QuestionBank_QuestionType == 'judge') { |
| | | // topicList.value.judge.data.push(questionObj) |
| | | // } else if (item.Embedded_QuestionBank_QuestionType == 'singleChoice') { |
| | | // topicList.value.radio.data.push(questionObj) |
| | | // } else if (item.Embedded_QuestionBank_QuestionType == 'multipleChoice') { |
| | | // topicList.value.check.data.push(questionObj) |
| | | // } else if (item.Embedded_QuestionBank_QuestionType == 'completion') { |
| | | // topicList.value.gap.data.push(questionObj) |
| | | // } else if (item.Embedded_QuestionBank_QuestionType == 'shortAnswer') { |
| | | // topicList.value.short.data.push(questionObj) |
| | | // } |
| | | questionArr.push(questionObj) |
| | | // cardList.value[0].infoList.push(questionObj) |
| | | }) |
| | | // loadings.value = false |
| | | this.setData({ |
| | | questionDataList: questionArr, |
| | | ['cardList[0].infoList']: questionArr, |
| | | loading: false, |
| | | }) |
| | | }) |
| | | }, |
| | | // 我的错题模式下获取错题id列表 |
| | | async getErrorIdList() { |
| | | await app.MG.identity |
| | | .getUserKey({ |
| | | domain: 'errorData', |
| | | keys: [this.data.rootCmsItemId] |
| | | }) |
| | | .then((res) => { |
| | | try { |
| | | this.setData({ |
| | | errorList: JSON.parse(res[0].value) |
| | | }) |
| | | } catch (error) { |
| | | } |
| | | if (this.data.errorList && this.data.errorList.length) { |
| | | this.getErrorDataList() |
| | | } else { |
| | | this.setData({ |
| | | loading: true |
| | | }) |
| | | wx.showModal({ |
| | | title: '提示', |
| | | content: '错题集暂无数据',//editable如果为true,这就是输入框的内容 |
| | | editable: false,//是否显示输入框 |
| | | showCancel: false, |
| | | success: (res) => { |
| | | if (res.confirm) { |
| | | this.setData({ |
| | | submitStatus: true |
| | | }) |
| | | this.goBack() |
| | | } |
| | | } |
| | | }) |
| | | } |
| | | }) |
| | | }, |
| | | // 获取错题集 |
| | | async getErrorDataList() { |
| | | this.setData({ |
| | | cardList: [ |
| | | { |
| | | catalogName: '错题集', |
| | | infoList: [] |
| | | } |
| | | ] |
| | | }) |
| | | let query = { |
| | | path: '*', |
| | | cmsPath: this.data.rootCmsItemId, |
| | | cmsType: '*', |
| | | productId: this.data.bookId, |
| | | queryType: '*', |
| | | itemIds: this.data.errorList.map((item) => item + ''), |
| | | itemFields: { |
| | | Embedded_QuestionBank_Stem: [], |
| | | Embedded_QuestionBank_AnalysisCon: [], |
| | | Embedded_QuestionBank_Answer: [], |
| | | Embedded_QuestionBank_Option: [], |
| | | Embedded_QuestionBank_QuestionType: [], |
| | | Embedded_QuestionBank_StemStyle: [], |
| | | Embedded_QuestionBank_OptionStyle: [], |
| | | Embedded_QuestionBank_KnowledgePoint: [], |
| | | Embedded_QuestionBank_Difficulty: [] |
| | | } |
| | | } |
| | | await app.MG.store.getProductDetail(query).then((res) => { |
| | | let questionArr = [] |
| | | res.datas.cmsDatas[0].datas.forEach((item, index) => { |
| | | const questionObj = { |
| | | number: index + 1, // 题号 |
| | | id: item.id, |
| | | stem: |
| | | item.Embedded_QuestionBank_QuestionType == 'completion' |
| | | ? JSON.parse(item.Embedded_QuestionBank_Stem) |
| | | .stemTxt.replaceAll('<vacancy>', ',input,') |
| | | .split(',') |
| | | : JSON.parse(item.Embedded_QuestionBank_Stem), // 题干 |
| | | answer: item.Embedded_QuestionBank_Answer, // 答案 |
| | | option: item.Embedded_QuestionBank_Option |
| | | ? JSON.parse(item.Embedded_QuestionBank_Option) |
| | | : '', // 选择题选项 |
| | | analysisCon: item.Embedded_QuestionBank_AnalysisCon, // 解析 |
| | | questionType: item.Embedded_QuestionBank_QuestionType, // 题型 |
| | | optionStyle: item.Embedded_QuestionBank_OptionStyle, // 选项显示类型 |
| | | stemStyle: item.Embedded_QuestionBank_StemStyle, // 题干显示类型 |
| | | difficulty: item.Embedded_QuestionBank_Difficulty |
| | | ? 4 - item.Embedded_QuestionBank_Difficulty |
| | | : 0, // 难度等级 |
| | | userAnswer: |
| | | item.Embedded_QuestionBank_QuestionType == 'completion' || |
| | | item.Embedded_QuestionBank_QuestionType == 'multipleChoice' |
| | | ? [] |
| | | : '', |
| | | isSubmit: false, // 查看解析 |
| | | isRight: null, // 是否正确 |
| | | isComplete: false, |
| | | isCollect: this.data.collectList.some((collectItem) => collectItem == item.id) |
| | | } |
| | | // 多选和填空答案肯为数组,要转换JSON格式 |
| | | if ( |
| | | questionObj.questionType == 'completion' || |
| | | questionObj.questionType == 'multipleChoice' |
| | | ) { |
| | | try { |
| | | questionObj.answer = JSON.parse(questionObj.answer) |
| | | } catch (error) { |
| | | // |
| | | } |
| | | } |
| | | // 填空题改造 |
| | | if (questionObj.questionType == 'completion') { |
| | | let index = 0 |
| | | for (let i = 0; i < questionObj.stem.length; i++) { |
| | | const item = questionObj.stem[i] |
| | | if (item == 'input') { |
| | | questionObj.stem[i] = { |
| | | num: index, |
| | | data: 'input' |
| | | } |
| | | questionObj.userAnswer[index] = '' |
| | | index++ |
| | | } |
| | | } |
| | | } |
| | | // 获取图片 |
| | | if (questionObj.stemStyle == 'Image' || questionObj.stemStyle == 'TxtAndImage') { |
| | | questionObj.stem.stemImage = getPublicImage(questionObj.stem.stemImage, 150) |
| | | } |
| | | if (questionObj.optionStyle == 'Image' || questionObj.optionStyle == 'TxtAndImage') { |
| | | questionObj.option.forEach(optionItem => { |
| | | if (optionItem.img) optionItem.img = getPublicImage(optionItem.img, 150) |
| | | }) |
| | | } |
| | | // if (item.Embedded_QuestionBank_QuestionType == 'judge') { |
| | | // topicList.value.judge.data.push(questionObj) |
| | | // } else if (item.Embedded_QuestionBank_QuestionType == 'singleChoice') { |
| | | // topicList.value.radio.data.push(questionObj) |
| | | // } else if (item.Embedded_QuestionBank_QuestionType == 'multipleChoice') { |
| | | // topicList.value.check.data.push(questionObj) |
| | | // } else if (item.Embedded_QuestionBank_QuestionType == 'completion') { |
| | | // topicList.value.gap.data.push(questionObj) |
| | | // } else if (item.Embedded_QuestionBank_QuestionType == 'shortAnswer') { |
| | | // topicList.value.short.data.push(questionObj) |
| | | // } |
| | | questionArr.push(questionObj) |
| | | }) |
| | | this.setData({ |
| | | questionDataList: questionArr, |
| | | ['cardList[0].infoList']: questionArr, |
| | | loading: false |
| | | }) |
| | | }) |
| | | // loadings.value = false |
| | | // console.log('错题集', topicList.value) |
| | | } |
| | | }) |