| | |
| | | time: 0, // 答题剩余时间 |
| | | datas: [], // 所有模考记录数据(题目列表,用户答题,考试报告) |
| | | answer: [] |
| | | } |
| | | }, |
| | | saveTime: 20, |
| | | isNight: false |
| | | }, |
| | | |
| | | /** |
| | | * 生命周期函数--监听页面加载 |
| | | */ |
| | | onLoad(options) { |
| | | // wx.enableAlertBeforeUnload({ |
| | | // message: "未提交,是否退出答题?", |
| | | // success: function (res) { |
| | | // console.log('确定', res); |
| | | // }, |
| | | // fail: function (err) { |
| | | // console.log("失败:", err); |
| | | // }, |
| | | // }); |
| | | const systInfo = wx.getSystemInfoSync(); |
| | | const menu = wx.getMenuButtonBoundingClientRect(); // 胶囊信息 |
| | | const navBarHeight = (menu.top - systInfo.statusBarHeight) * 2 + menu.height; // 导航栏高度 |
| | |
| | | * 生命周期函数--监听页面初次渲染完成 |
| | | */ |
| | | onReady() { |
| | | |
| | | }, |
| | | |
| | | /** |
| | | * 生命周期函数--监听页面显示 |
| | | */ |
| | | onShow() { |
| | | |
| | | if (this.data.answerType != 'mock') { |
| | | if (wx.timer) { |
| | | clearInterval(wx.timer) |
| | | } |
| | | } |
| | | if (this.data.answerType == 'mock') { |
| | | if (wx.timer) { |
| | | clearInterval(wx.timer) |
| | | } |
| | | wx.timer = setInterval(() => { |
| | | this.setData({ |
| | | saveTime: this.data.saveTime - 1 |
| | | }) |
| | | if (this.data.saveTime == 0) { |
| | | this.saveMockData() |
| | | } |
| | | }, 1000) |
| | | } |
| | | }, |
| | | |
| | | /** |
| | | * 生命周期函数--监听页面隐藏 |
| | | */ |
| | | onHide() { |
| | | |
| | | if (wx.timer) { |
| | | clearInterval(wx.timer) |
| | | } |
| | | }, |
| | | |
| | | /** |
| | | * 生命周期函数--监听页面卸载 |
| | | */ |
| | | onUnload() { |
| | | onUnload(e) { |
| | | if (wx.timer) { |
| | | clearInterval(wx.timer) |
| | | } |
| | | if (this.data.countdownInterval !== null) { |
| | | clearInterval(this.data.countdownInterval) |
| | | } |
| | |
| | | */ |
| | | onShareAppMessage() { |
| | | }, |
| | | // 返回 |
| | | goBack() { |
| | | wx.navigateBack(); |
| | | |
| | | // 监听watch |
| | | watch(context, variableName, callback) { |
| | | let value = context.data[variableName]; // 获取被监听属性的当前值 |
| | | |
| | | // 使用 Object.defineProperty 方法在数据对象上定义属性的 getter 和 setter |
| | | Object.defineProperty(context.data, variableName, { |
| | | configurable: true, // 可配置 |
| | | enumerable: true, // 可枚举 |
| | | get: function () { |
| | | return value; // 返回属性的当前值 |
| | | }, |
| | | set: function (newVal) { |
| | | const oldVal = value; // 记录属性的旧值 |
| | | value = newVal; // 更新属性的值 |
| | | callback.call(context, newVal, oldVal); // 调用回调函数,传递新值和旧值 |
| | | } |
| | | }); |
| | | }, |
| | | |
| | | // 返回 |
| | | goBack() { |
| | | console.log(this.data.submitStatus); |
| | | wx.navigateBack(); |
| | | }, |
| | | //设置背景色 |
| | | changeBGColor(e) { |
| | | this.setData({ |
| | | isNight: e.detail.value |
| | | }) |
| | | }, |
| | | // 获取保存的倒计时时间 |
| | | getSavedTime() { |
| | | const savedTime = wx.getStorageSync('countdownTime') |
| | |
| | | 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) |
| | | |
| | | if (this.data.answerType == 'collectQuestion' || this.data.answerType == 'errorQuestion') { |
| | | 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) { |
| | |
| | | questionList.forEach(item => { |
| | | if (item.id == id) { |
| | | item.userAnswer = radioChecked |
| | | item.isUserAnswer = this.isHaveAnswer(radioChecked) |
| | | } |
| | | }) |
| | | this.setData({ |
| | | questionDataList: questionList |
| | | const cardListUpdata = this.data.cardList |
| | | cardListUpdata.forEach(item => { |
| | | item.infoList.forEach(citem => { |
| | | if (citem.id == id) { |
| | | citem.userAnswer = radioChecked |
| | | citem.isUserAnswer = this.isHaveAnswer(radioChecked) |
| | | } |
| | | }) |
| | | }) |
| | | console.log(this.data.questionDataList); |
| | | this.setData({ |
| | | questionDataList: questionList, |
| | | cardList: cardListUpdata |
| | | }) |
| | | if (this.data.answerType == 'mock') { |
| | | this.setData({ |
| | | saveTime: 20 |
| | | }) |
| | | } |
| | | }, |
| | | // 输入框触发 |
| | | 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 index = Number(e.detail.value.currentTarget.dataset.index) |
| | | console.log(index); |
| | | const questionList = this.data.questionDataList |
| | | questionList.forEach(item => { |
| | | if (item.id == id) { |
| | | item.userAnswer[index] = inputData |
| | | return item.isUserAnswer = this.isHaveAnswer(inputData) |
| | | } |
| | | }) |
| | | this.setData({ |
| | | questionDataList: questionList |
| | | const cardListUpdata = this.data.cardList |
| | | cardListUpdata.forEach(item => { |
| | | item.infoList.forEach(citem => { |
| | | if (citem.id == id) { |
| | | citem.userAnswer[index] = inputData |
| | | return citem.isUserAnswer = this.isHaveAnswer(inputData) |
| | | } |
| | | }) |
| | | }) |
| | | console.log(this.data.questionDataList); |
| | | this.setData({ |
| | | questionDataList: questionList, |
| | | cardList: cardListUpdata, |
| | | }) |
| | | if (this.data.answerType == 'mock') { |
| | | this.setData({ |
| | | saveTime: 20 |
| | | }) |
| | | } |
| | | }, |
| | | // 数组转为字符串方法 |
| | | arrayToString(data) { |
| | |
| | | } else { |
| | | return false |
| | | } |
| | | } else { |
| | | } else if (typeof data == 'object') { |
| | | const answer = data.find((item) => item.length > 0) |
| | | if (answer) { |
| | | return true |
| | | } else { |
| | | return false |
| | | } |
| | | } else { |
| | | return false |
| | | } |
| | | }, |
| | | // 提交逻辑 |
| | | submitPaper() { |
| | | // 关闭退出页面监听 |
| | | wx.disableAlertBeforeUnload() |
| | | this.setData({ |
| | | submitStatus: true |
| | | }) |
| | | const child = this.selectComponent('#question-options') |
| | | if (this.data.answerType == 'option' || this.data.answerType == 'errorQuestion' || this.data.answerType == 'mock') { |
| | | // 先遍历所有题目,将未批改的题目批改 |
| | | 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.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() |
| | | } |
| | | this.recordAnswerData() |
| | | child.openTestReportDialog() |
| | | } else if (this.data.answerType == 'collectQuestion' || this.data.answerType == 'errorQuestion') { |
| | | this.goBack() |
| | | } else if (this.data.answerType == 'mock') { |
| | | this.toggleCountdown() |
| | | // 设置模考状态为已完成 |
| | | const mockData = this.data.mockData |
| | | mockData.datas.forEach((item) => { |
| | | if (item.id == this.data.uuid) { |
| | | item.state = '3' |
| | | item.report = { |
| | | userScore: this.data.subjectiveNum |
| | | } |
| | | } |
| | | }) |
| | | this.setData({ |
| | | mockData: mockData, |
| | | submitStatus: true |
| | | }) |
| | | this.setMockInfo(mockData.datas) |
| | | // 记录用户答题数据 |
| | | let saveData = [] |
| | | for (let index = 0; index < this.data.questionDataList.length; index++) { |
| | | const item = this.data.questionDataList[index]; |
| | | saveData.push({ |
| | | id: item.id, |
| | | answer: item.userAnswer, |
| | | isRight: item.isRight |
| | | }) |
| | | } |
| | | app.MG.identity.setUserKey({ |
| | | setKeyRequests: [ |
| | | { |
| | | domain: 'mockAnswerData', |
| | | key: this.data.uuid, |
| | | value: JSON.stringify({ |
| | | time: this.data.countdownTime, |
| | | answerData: saveData |
| | | }) |
| | | } |
| | | ] |
| | | }) |
| | | child.openTestReportDialog() |
| | | } |
| | | |
| | | }, |
| | |
| | | let oldQuestionList = [] |
| | | oldQuestionList = await this.getMockQuestionList() |
| | | const userAnswerList = await this.getMockAnswer() |
| | | await this.getMockDataList(oldQuestionList, userAnswerList) |
| | | this.setData({ |
| | | 'mockData.sumTime': oldMockData.time, |
| | | cardList: oldQuestionList |
| | | }) |
| | | |
| | | await this.getMockDataList(oldQuestionList, userAnswerList) |
| | | } |
| | | if (oldMockData.state == '0' || oldMockData.state == '1' || oldMockData.state == '2') { |
| | | this.startCountdown() |
| | | } |
| | | if (oldMockData.state == '3') { |
| | | this.setData({ |
| | | submitStatus: true, |
| | | subjectiveNum: oldMockData.report.userScore |
| | | }) |
| | | } |
| | | } |
| | | }) |
| | |
| | | setKeyRequests: [ |
| | | { |
| | | domain: 'mockAnswerData', |
| | | key: route.query.uuid, |
| | | key: this.data.uuid, |
| | | value: JSON.stringify({ |
| | | time: countDownRef.value.countdownTime, |
| | | time: this.data.countdownTime, |
| | | answerData: [] |
| | | }) |
| | | } |
| | |
| | | let value = JSON.parse(res[0].value) |
| | | // 有答题记录,得分赋值 |
| | | if (value) { |
| | | wx.disableAlertBeforeUnload() |
| | | this.setData({ |
| | | submitStatus: true |
| | | }) |
| | |
| | | this.setData({ |
| | | currentIndex: value.currentIndex |
| | | }) |
| | | console.log(this.data.submitStatus); |
| | | // 携带答题记录 获取题目 |
| | | await this.getQuestionList(value.dataList) |
| | | } else { |
| | |
| | | errorList: JSON.parse(res[0].value) |
| | | }) |
| | | } catch (error) { |
| | | |
| | | } |
| | | }) |
| | | }, |
| | | // 获取题库题目 |
| | | getQuestionList(oldData) { |
| | | async getQuestionList(oldData) { |
| | | // 清空正确题数记录 |
| | | this.setData({ |
| | | cardList: [], |
| | | correctNum: 0, |
| | | }) |
| | | let flag = 0 |
| | | this.data.idPathList.forEach((pathitem) => { |
| | | for (let index = 0; index < this.data.idPathList.length; index++) { |
| | | const pathitem = this.data.idPathList[index]; |
| | | const pathList = this.data.cardList |
| | | pathList.push({ |
| | | path: pathitem.productLinkPath, |
| | |
| | | size: 999 |
| | | } |
| | | } |
| | | app.MG.store.getProductDetail(query).then((res) => { |
| | | await app.MG.store.getProductDetail(query).then((res) => { |
| | | this.setData({ |
| | | total: res.datas.cmsDatas[0].datas.length |
| | | }) |
| | |
| | | item.Embedded_QuestionBank_QuestionType == 'multipleChoice' |
| | | ? [] |
| | | : '', |
| | | isUserAnswer: oldObj ? this.isHaveAnswer(oldObj.userAnswer) : false, |
| | | isRight: oldObj ? oldObj.isRight : null, |
| | | isComplete: oldObj ? oldObj.isComplete : false, |
| | | isCollect: this.data.collectList.indexOf(item.id) > -1 ? true : false, |
| | |
| | | aitem.infoList.forEach((bitem, bindex) => { |
| | | questionList.push(bitem) |
| | | bitem.number = bindex + 1 |
| | | bitem.grade = 2 |
| | | bitem.score = 2 |
| | | }) |
| | | }) |
| | | this.setData({ |
| | | questionDataList: questionList, |
| | | cardList: cardUpdatedList |
| | | cardList: cardUpdatedList, |
| | | }) |
| | | }) |
| | | }) |
| | | }) |
| | | } |
| | | this.setData({ |
| | | loading: false, |
| | | loading: false |
| | | }) |
| | | }, |
| | | // 批改题目 (练习,我的错题,我的收藏) |
| | | // 批改题目 (练习,我的错题,我的收藏,,组卷) |
| | | handleQuestion(num) { |
| | | const questionList = this.data.questionDataList |
| | | const index = num - 1 >= 0 ? num - 1 : 0 |
| | |
| | | if (item.questionType != 'shortAnswer') { |
| | | this.setData({ |
| | | subjectiveTotal: this.data.subjectiveTotal + 1, |
| | | subjectiveGrade: this.data.subjectiveGrade + item.grade |
| | | subjectiveGrade: this.data.subjectiveGrade + item.score |
| | | }) |
| | | } |
| | | if (questionList[index].isRight && item.questionType != 'shortAnswer') { |
| | | // 客观题回答正确 |
| | | this.setData({ |
| | | subjectiveNum: this.data.subjectiveNum + item.grade, |
| | | subjectiveNum: this.data.subjectiveNum + item.score, |
| | | correctNum: this.data.correctNum + 1 |
| | | }) |
| | | } |
| | |
| | | console.log(res) |
| | | }) |
| | | } |
| | | |
| | | this.setData({ |
| | | questionDataList: questionList |
| | | }) |
| | |
| | | }) |
| | | try { |
| | | this.setData({ |
| | | 'mockData.time': JSON.parse(configRes.config).time * 1000 |
| | | 'mockData.time': JSON.parse(configRes.config).time * 1000, |
| | | countdownTime: JSON.parse(configRes.config).time * 1000 |
| | | }) |
| | | } catch (error) { |
| | | this.setData({ |
| | | 'mockData.time': 3600 * 1000 |
| | | 'mockData.time': 3600 * 1000, |
| | | countdownTime: 3600 * 1000, |
| | | }) |
| | | } |
| | | this.setData({ |
| | |
| | | numberIndex++ |
| | | return { |
| | | number: numberIndex, |
| | | itemId: idItem.id, |
| | | id: idItem.id, |
| | | score: idItem.score |
| | | } |
| | | }) |
| | |
| | | numberIndex++ |
| | | return { |
| | | number: numberIndex, |
| | | itemId: extractCmsItem.id, |
| | | id: extractCmsItem.id, |
| | | score: extractCmsItem.score |
| | | } |
| | | }) |
| | |
| | | await this.getMockDataList(this.data.cardList) // 请求题目数据 |
| | | }) |
| | | }, |
| | | |
| | | // 获取组卷题目列表 |
| | | async getMockDataList(questionList, oldList) { |
| | | const questionDataList = this.data.questionDataList |
| | | for (let pathindex = 0; pathindex < questionList.length; pathindex++) { |
| | | const pathitem = questionList[pathindex]; |
| | | let itemIds = [] |
| | | pathitem.infoList.forEach(item => { |
| | | itemIds.push(item.id + '') |
| | | }) |
| | | let query = { |
| | | path: '*', |
| | | cmsPath: this.data.rootCmsItemId, |
| | | cmsType: '*', |
| | | productId: this.data.bookId, |
| | | queryType: '*', |
| | | itemIds, |
| | | 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) => { |
| | | res.datas.cmsDatas[0].datas.forEach((item, index) => { |
| | | // 循环questionList,给每题赋值分数 |
| | | let oldObj |
| | | if (oldList) oldObj = oldList.find((oldItem) => oldItem.id == item.id) |
| | | let questionObj = { |
| | | // number: pathitem.infoList.find(infoItem => infoItem.itemId == item.id).number, |
| | | id: item.id, |
| | | score: pathitem.infoList.find(infoItem => infoItem.id == item.id).score, |
| | | 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: oldObj |
| | | ? oldObj.answer |
| | | : item.Embedded_QuestionBank_QuestionType == 'completion' || |
| | | item.Embedded_QuestionBank_QuestionType == 'multipleChoice' |
| | | ? [] |
| | | : '', |
| | | isUserAnswer: oldObj ? this.isHaveAnswer(oldObj.userAnswer) : false, |
| | | isRight: oldObj ? oldObj.isRight : null, |
| | | // isComplete: oldObj ? oldObj.isComplete : false, |
| | | isComplete: this.data.mockData.state == '3' ? true : false, |
| | | isCollect: this.data.collectList.indexOf(item.id) > -1 ? true : false, |
| | | isUnfold: '' // 控制解析的折叠面板是否展开 |
| | | } |
| | | // 多选和填空答案肯为数组,要转换JSON格式 |
| | | if ( |
| | | questionObj.questionType == 'completion' || |
| | | questionObj.questionType == 'multipleChoice' |
| | | ) { |
| | | try { |
| | | questionObj.answer = JSON.parse(questionObj.answer) |
| | | } catch (error) { |
| | | questionObj.answer = item.Embedded_QuestionBank_Answer |
| | | } |
| | | } |
| | | // 填空题改造 |
| | | 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' |
| | | } |
| | | if (!oldObj) 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 (oldObj && oldObj.isRight) { |
| | | this.setData({ |
| | | correctNum: this.data.correctNum + 1 |
| | | }) |
| | | } |
| | | if (item.questionType != 'shortAnswer' && item.isComplete) { |
| | | this.setData({ |
| | | subjectiveTotal: this.data.subjectiveTotal + 1 |
| | | }) |
| | | } |
| | | // if (oldObj && isHaveAnswer(oldObj.answer)) countDownRef.value.changeAlready() |
| | | // cardList赋值 |
| | | let cardIndex = this.data.cardList.findIndex((item) => item.catalogName == pathitem.catalogName) |
| | | let infoIndex = this.data.cardList[cardIndex].infoList.findIndex(infoItem => infoItem.id == item.id) |
| | | this.setData({ |
| | | [`cardList[${cardIndex}].infoList[${infoIndex}]`]: questionObj |
| | | }) |
| | | let questionList = [] |
| | | const cardUpdatedList = this.data.cardList |
| | | cardUpdatedList.forEach(aitem => { |
| | | aitem.infoList.forEach((bitem, bindex) => { |
| | | questionList.push(bitem) |
| | | bitem.number = bindex + 1 |
| | | }) |
| | | }) |
| | | this.setData({ |
| | | questionDataList: questionList, |
| | | cardList: cardUpdatedList |
| | | }) |
| | | }) |
| | | }) |
| | | } |
| | | this.setData({ |
| | | loading: false |
| | | }) |
| | | }, |
| | | // 获取组卷数据 |
| | | getMockInfo(callback) { |
| | | app.MG.identity |
| | |
| | | .then((res) => { |
| | | if (res[0]) { |
| | | this.setData({ |
| | | 'mockData.time': JSON.parse(res[0].value).timem, |
| | | currentIndex: JSON.parse(res[0].value).currentIndex, |
| | | 'mockData.time': JSON.parse(res[0].value).time, |
| | | countdownTime: JSON.parse(res[0].value).time ? JSON.parse(res[0].value).time : this.data.mockData.sumTime, |
| | | 'mockData.answer': JSON.parse(res[0].value).answerData |
| | | }) |
| | | console.log(JSON.parse(res[0].value)); |
| | | data = JSON.parse(res[0].value).answerData |
| | | } |
| | | }) |
| | | return data |
| | | }, |
| | | // 组卷获取题目列表 |
| | | async getMockDataList(questionList, oldList) { |
| | | const questionDataList = this.data.questionDataList |
| | | questionList.forEach(async (pathitem, pathindex) => { |
| | | let itemIds = [] |
| | | pathitem.infoList.forEach(item => { |
| | | itemIds.push(item.itemId + '') |
| | | }) |
| | | let query = { |
| | | path: '*', |
| | | cmsPath: this.data.rootCmsItemId, |
| | | cmsType: '*', |
| | | productId: this.data.bookId, |
| | | queryType: '*', |
| | | itemIds, |
| | | 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: [] |
| | | |
| | | // 记录模考答题数据 |
| | | saveMockData() { |
| | | const data = this.data.mockData.datas.find((itme) => itme.id == this.data.uuid) |
| | | if (data.state == '3') return true |
| | | const saveData = this.data.mockData.answer |
| | | for (let i = 0; i < this.data.questionDataList.length; i++) { |
| | | const item = this.data.questionDataList[i] |
| | | if (this.isHaveAnswer(item.userAnswer)) { |
| | | const index = saveData.findIndex((saveitem) => saveitem.id == item.id) |
| | | if (index + '' != '-1') { |
| | | saveData[index].answer = item.userAnswer |
| | | } else { |
| | | saveData.push({ |
| | | id: item.id, |
| | | answer: item.userAnswer |
| | | }) |
| | | } |
| | | } |
| | | await app.MG.store.getProductDetail(query).then((res) => { |
| | | res.datas.cmsDatas[0].datas.forEach((item, index) => { |
| | | // 循环questionList,给每题赋值分数 |
| | | let oldObj |
| | | if (oldList) oldObj = oldList.find((oldItem) => oldItem.id == item.id) |
| | | let questionObj = { |
| | | 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: oldObj |
| | | ? oldObj.answer |
| | | : item.Embedded_QuestionBank_QuestionType == 'completion' || |
| | | item.Embedded_QuestionBank_QuestionType == 'multipleChoice' |
| | | ? [] |
| | | : '', |
| | | isRight: oldObj ? oldObj.isRight : null, |
| | | // isComplete: oldObj ? oldObj.isComplete : false, |
| | | isComplete: oldObj ? oldObj.isComplete : false, |
| | | isCollect: this.data.collectList.indexOf(item.id) > -1 ? true : false, |
| | | isUnfold: '' // 控制解析的折叠面板是否展开 |
| | | } |
| | | const cardList = this.data.cardList |
| | | for (let a = 0; a < cardList.length; a++) { |
| | | const cardItem = cardList[a]; |
| | | for (let b = 0; b < cardItem.infoList.length; b++) { |
| | | if (cardItem.infoList[b].itemId == item.id) { |
| | | questionObj.number = cardItem.infoList[b].number; |
| | | questionObj.score = cardItem.infoList[b].score; |
| | | cardItem.infoList[b] = obj; |
| | | } |
| | | } |
| | | } |
| | | this.setData({ |
| | | cardList: cardList |
| | | }) |
| | | // 多选和填空答案肯为数组,要转换JSON格式 |
| | | if ( |
| | | questionObj.questionType == 'completion' || |
| | | questionObj.questionType == 'multipleChoice' |
| | | ) { |
| | | try { |
| | | questionObj.answer = JSON.parse(questionObj.answer) |
| | | } catch (error) { |
| | | questionObj.answer = item.Embedded_QuestionBank_Answer |
| | | } |
| | | } |
| | | // 填空题改造 |
| | | 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' |
| | | } |
| | | if (!oldObj) questionObj.userAnswer[index] = '' |
| | | index++ |
| | | } |
| | | } |
| | | } |
| | | if (oldObj && oldObj.isRight) { |
| | | this.setData({ |
| | | correctNum: this.data.correctNum + 1 |
| | | }) |
| | | } |
| | | if (item.questionType != 'shortAnswer') { |
| | | this.setData({ |
| | | subjectiveTotal: this.data.subjectiveTotal + 1 |
| | | }) |
| | | } |
| | | // if (oldObj && isHaveAnswer(oldObj.answer)) countDownRef.value.changeAlready() |
| | | questionDataList.push(questionObj) |
| | | }) |
| | | } |
| | | // |
| | | if (this.data.mockData.state == '1') { |
| | | const datas = this.data.mockData.datas |
| | | datas.forEach((item) => { |
| | | if (item.id == this.data.uuid) { |
| | | item.state = '2' |
| | | } |
| | | }) |
| | | }) |
| | | |
| | | this.setData({ |
| | | questionDataList: questionDataList, |
| | | loading: false |
| | | }) |
| | | this.setMockInfo(datas) |
| | | } |
| | | // |
| | | app.MG.identity |
| | | .setUserKey({ |
| | | setKeyRequests: [ |
| | | { |
| | | domain: 'mockAnswerData', |
| | | key: this.data.uuid, |
| | | value: JSON.stringify({ |
| | | currentIndex: this.data.currentIndex, |
| | | time: this.data.countdownTime, |
| | | answerData: saveData |
| | | }) |
| | | } |
| | | ] |
| | | }) |
| | | .then((res) => { |
| | | this.setData({ |
| | | saveTime: 20 |
| | | }) |
| | | console.log('模考答题数据已记录') |
| | | }) |
| | | } |
| | | }) |