From fa662bf36ed8db479b42f912d4705c11511db558 Mon Sep 17 00:00:00 2001 From: 闫增涛 <1829501689@qq.com> Date: 星期二, 19 三月 2024 18:45:25 +0800 Subject: [PATCH] 组卷功能完善 --- packageBookService/pages/bookServices/examination/examination.js | 450 +++++++++++++++++++++++++++++++++++++------------------ 1 files changed, 299 insertions(+), 151 deletions(-) diff --git a/packageBookService/pages/bookServices/examination/examination.js b/packageBookService/pages/bookServices/examination/examination.js index e5c3c26..d948903 100644 --- a/packageBookService/pages/bookServices/examination/examination.js +++ b/packageBookService/pages/bookServices/examination/examination.js @@ -39,7 +39,9 @@ time: 0, // 绛旈鍓╀綑鏃堕棿 datas: [], // 鎵�鏈夋ā鑰冭褰曟暟鎹�(棰樼洰鍒楄〃锛岀敤鎴风瓟棰橈紝鑰冭瘯鎶ュ憡) answer: [] - } + }, + saveTime: 20, + isNight: false }, /** @@ -80,7 +82,19 @@ * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鏄剧ず */ onShow() { - + 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) + } }, /** @@ -122,7 +136,12 @@ goBack() { wx.navigateBack(); }, - + //璁剧疆鑳屾櫙鑹� + changeBGColor(e) { + this.setData({ + isNight: e.detail.value + }) + }, // 鑾峰彇淇濆瓨鐨勫�掕鏃舵椂闂� getSavedTime() { const savedTime = wx.getStorageSync('countdownTime') @@ -207,12 +226,17 @@ questionList.forEach(item => { if (item.id == id) { item.userAnswer = radioChecked + item.isUserAnswer = this.isHaveAnswer(radioChecked) } }) this.setData({ questionDataList: questionList }) - console.log(this.data.questionDataList); + if (this.data.answerType == 'mock') { + this.setData({ + saveTime: 20 + }) + } }, // 杈撳叆妗嗚Е鍙� onChangeInput(e) { @@ -222,13 +246,18 @@ const questionList = this.data.questionDataList questionList.forEach(item => { if (item.id == id) { - item.userAnswer[index] = inputData + item.userAnswer[index] = inputData, + item.isUserAnswer = this.isHaveAnswer(item.userAnswer) } }) this.setData({ questionDataList: questionList }) - console.log(this.data.questionDataList); + if (this.data.answerType == 'mock') { + this.setData({ + saveTime: 20 + }) + } }, // 鏁扮粍杞负瀛楃涓叉柟娉� arrayToString(data) { @@ -267,23 +296,61 @@ 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() } }, @@ -342,7 +409,14 @@ 'mockData.sumTime': oldMockData.time, cardList: oldQuestionList }) - + } + if (oldMockData.state == '0' || oldMockData.state == '1' || oldMockData.state == '2') { + this.startCountdown() + } + if (oldMockData.state == '3') { + this.setData({ + submitStatus: true + }) } } }) @@ -377,9 +451,9 @@ setKeyRequests: [ { domain: 'mockAnswerData', - key: route.query.uuid, + key: this.data.uuid, value: JSON.stringify({ - time: countDownRef.value.countdownTime, + time: this.data.countdownTime, answerData: [] }) } @@ -542,6 +616,7 @@ 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, @@ -623,7 +698,7 @@ aitem.infoList.forEach((bitem, bindex) => { questionList.push(bitem) bitem.number = bindex + 1 - bitem.grade = 2 + bitem.score = 2 }) }) this.setData({ @@ -685,13 +760,13 @@ 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 }) } @@ -725,6 +800,7 @@ console.log(res) }) } + this.setData({ questionDataList: questionList }) @@ -1180,11 +1256,13 @@ }) 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({ @@ -1202,7 +1280,7 @@ numberIndex++ return { number: numberIndex, - itemId: idItem.id, + id: idItem.id, score: idItem.score } }) @@ -1216,7 +1294,7 @@ numberIndex++ return { number: numberIndex, - itemId: extractCmsItem.id, + id: extractCmsItem.id, score: extractCmsItem.score } }) @@ -1252,7 +1330,146 @@ await this.getMockDataList(this.data.cardList) // 璇锋眰棰樼洰鏁版嵁 }) }, - + // 鑾峰彇缁勫嵎棰樼洰鍒楄〃 + async getMockDataList(questionList, oldList) { + console.log(questionList, oldList); + const questionDataList = this.data.questionDataList + questionList.forEach(async (pathitem, 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, // 瑙f瀽 + 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 : oldObj ? this.isHaveAnswer(oldObj.answer) : false, + isCollect: this.data.collectList.indexOf(item.id) > -1 ? true : false, + isUnfold: '' // 鎺у埗瑙f瀽鐨勬姌鍙犻潰鏉挎槸鍚﹀睍寮� + } + // 澶氶�夊拰濉┖绛旀鑲负鏁扮粍锛岃杞崲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 + // if (flag == this.data.idPathList.length) { + cardUpdatedList.forEach(aitem => { + aitem.infoList.forEach((bitem, bindex) => { + questionList.push(bitem) + bitem.number = bindex + 1 + }) + }) + this.setData({ + questionDataList: questionList, + cardList: cardUpdatedList + }) + }) + }) + }) + this.setData({ + // questionDataList: questionDataList, + loading: false + }) + }, // 鑾峰彇缁勫嵎鏁版嵁 getMockInfo(callback) { app.MG.identity @@ -1316,136 +1533,67 @@ .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, // 瑙f瀽 - 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: '' // 鎺у埗瑙f瀽鐨勬姌鍙犻潰鏉挎槸鍚﹀睍寮� - } - 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('妯¤�冪瓟棰樻暟鎹凡璁板綍') + }) } }) \ No newline at end of file -- Gitblit v1.9.1