| | |
| | | answer: [] |
| | | }, |
| | | saveTime: 20, |
| | | isNight: false |
| | | isNight: false, |
| | | sliderValue: 0, // 字体滑块 |
| | | }, |
| | | |
| | | /** |
| | |
| | | } |
| | | }); |
| | | }, |
| | | |
| | | onChangeSlider(e) { |
| | | this.setData({ |
| | | sliderValue: e.detail.value |
| | | }) |
| | | console.log(e.detail.value); |
| | | }, |
| | | // 返回 |
| | | goBack() { |
| | | console.log(this.data.submitStatus); |
| | |
| | | this.setData({ |
| | | currentIndex: 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) |
| | | let index = e.detail.index - 1 >= 0 ? e.detail.index - 1 : 0 |
| | | const item = this.data.questionDataList[index] |
| | | if ((this.data.answerType == 'collectQuestion' || this.data.answerType == 'errorQuestion') && !item.isComplete) { |
| | | let flag = this.isHaveAnswer(item.userAnswer) |
| | | if (flag) this.handleQuestion(index) |
| | | } |
| | | }, |
| | | // 点击答题卡跳转题目 |
| | |
| | | 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) { |
| | | // 我的错题和我的收藏模式下,单选题选择了直接批改 |
| | | for (let index = 0; index < questionList.length; index++) { |
| | | const item = questionList[index]; |
| | | if (item.id == id && !item.isComplete) { |
| | | item.userAnswer = radioChecked |
| | | item.isUserAnswer = this.isHaveAnswer(radioChecked) |
| | | if ((item.questionType == 'singleChoice' || item.questionType == 'judge') && (this.data.answerType == 'collectQuestion' || this.data.answerType == 'errorQuestion') && !item.isComplete) { |
| | | let index = this.data.currentIndex - 1 >= 0 ? this.data.currentIndex - 1 : 0 |
| | | this.handleQuestion(index) |
| | | } |
| | | } |
| | | }) |
| | | } |
| | | // questionList.forEach(item => { |
| | | // if (item.id == id && !item.isComplete) { |
| | | // item.userAnswer = radioChecked |
| | | // item.isUserAnswer = this.isHaveAnswer(radioChecked) |
| | | // if ((item.questionType == 'singleChoice' || item.questionType == 'judge') && (this.data.answerType == 'collectQuestion' || this.data.answerType == 'errorQuestion') && !item.isComplete) { |
| | | // this.handleQuestion(this.data.currentIndex) |
| | | // } |
| | | // } |
| | | // }) |
| | | const cardListUpdata = this.data.cardList |
| | | cardListUpdata.forEach(item => { |
| | | item.infoList.forEach(citem => { |
| | | if (citem.id == id) { |
| | | for (let index = 0; index < cardListUpdata.length; index++) { |
| | | const item = cardListUpdata[index]; |
| | | for (let cindex = 0; cindex < item.infoList.length; cindex++) { |
| | | const citem = item.infoList[cindex]; |
| | | if (citem.id == id && !citem.isComplete) { |
| | | citem.userAnswer = radioChecked |
| | | citem.isUserAnswer = this.isHaveAnswer(radioChecked) |
| | | } |
| | | }) |
| | | }) |
| | | } |
| | | } |
| | | // cardListUpdata.forEach(item => { |
| | | // item.infoList.forEach(citem => { |
| | | // if (citem.id == id && !citem.isComplete) { |
| | | // citem.userAnswer = radioChecked |
| | | // citem.isUserAnswer = this.isHaveAnswer(radioChecked) |
| | | // } |
| | | // }) |
| | | // }) |
| | | this.setData({ |
| | | questionDataList: questionList, |
| | | cardList: cardListUpdata |
| | |
| | | }, |
| | | // 提交逻辑 |
| | | submitPaper() { |
| | | |
| | | // 关闭退出页面监听 |
| | | wx.disableAlertBeforeUnload() |
| | | this.setData({ |
| | | submitStatus: true |
| | | submitStatus: true, |
| | | loading: 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 (!item.isComplete) this.handleQuestion(index) |
| | | } |
| | | } |
| | | if (this.data.answerType == 'option') { |
| | |
| | | }) |
| | | child.openTestReportDialog() |
| | | } |
| | | |
| | | this.setData({ |
| | | loading: false |
| | | }) |
| | | }, |
| | | // 初始化函数 |
| | | async init() { |
| | |
| | | }) |
| | | if (this.data.answerType == 'option') { |
| | | if (this.data) |
| | | this.startCountdown() |
| | | this.setData({ |
| | | countdownTime: 2 * 60 * 60 * 1000 |
| | | }) |
| | | // this.startCountdown() |
| | | this.setData({ |
| | | countdownTime: 2 * 60 * 60 * 1000 |
| | | }) |
| | | // 测试答题 |
| | | await this.getCollectIdList() // 获取收藏id列表 |
| | | await this.getErrorList() // 获取错题id列表 |
| | | } else if (this.data.answerType == 'collectQuestion') { |
| | | this.setData({ |
| | | submitStatus: true |
| | | }) |
| | | // 我的收藏 |
| | | await this.getcollectId() // 获取收藏题目 |
| | | } else if (this.data.answerType == 'errorQuestion') { |
| | | this.setData({ |
| | | submitStatus: true |
| | | }) |
| | | // 我的错题 |
| | | // loadings.value = true |
| | | await this.getErrorIdList() |
| | |
| | | } |
| | | } |
| | | } |
| | | // 题干富文本处理 |
| | | if (questionObj.stemStyle == 'RichText') { |
| | | // questionObj.option.txt = '' |
| | | questionObj.stem.stemTxt = questionObj.stem.stemTxt.replace(/\<img/gi, '<img class="stem-rich-img"').replace(/\<p/gi, '<p class="stem-rich-p"') |
| | | |
| | | } |
| | | // 选项富文本处理 |
| | | if (questionObj.optionStyle == 'RichText' && (questionObj.questionType == 'singleChoice' || questionObj.questionType == 'judge' || questionObj.questionType == 'multipleChoice')) { |
| | | questionObj.option.forEach(item => { |
| | | if (item.txt) item.txt = item.txt.replace(/\<img/gi, '<img class="option-rich-img"').replace(/\<p/gi, '<p class="stem-rich-p"') |
| | | }) |
| | | } |
| | | // 获取图片 |
| | | if (questionObj.stemStyle == 'Image' || questionObj.stemStyle == 'TxtAndImage') { |
| | | questionObj.stem.stemImage = getPublicImage(questionObj.stem.stemImage, 150) |
| | |
| | | }) |
| | | }) |
| | | } |
| | | // 有题目再开始倒计时 |
| | | if (this.data.questionDataList.length) this.startCountdown() |
| | | this.setData({ |
| | | loading: false |
| | | }) |
| | |
| | | // 批改题目 (练习,我的错题,我的收藏,,组卷) |
| | | handleQuestion(num) { |
| | | const questionList = this.data.questionDataList |
| | | const index = num - 1 >= 0 ? num - 1 : 0 |
| | | const index = num |
| | | if (questionList[index].isComplete) { |
| | | // 题目已完成,跳过 |
| | | return true |
| | |
| | | } |
| | | } |
| | | } |
| | | // 题干富文本处理 |
| | | if (questionObj.stemStyle == 'RichText') { |
| | | // questionObj.option.txt = '' |
| | | questionObj.stem.stemTxt = questionObj.stem.stemTxt.replace(/\<img/gi, '<img class="stem-rich-img"') |
| | | } |
| | | // 选项富文本处理 |
| | | if (questionObj.optionStyle == 'RichText' && (questionObj.questionType == 'singleChoice' || questionObj.questionType == 'judge' || questionObj.questionType == 'multipleChoice')) { |
| | | questionObj.option.forEach(item => { |
| | | if (item.txt) item.txt = item.txt.replace(/\<img/gi, '<img class="option-rich-img"') |
| | | }) |
| | | } |
| | | // 获取图片 |
| | | if (questionObj.stemStyle == 'Image' || questionObj.stemStyle == 'TxtAndImage') { |
| | | questionObj.stem.stemImage = getPublicImage(questionObj.stem.stemImage, 150) |
| | |
| | | }) |
| | | console.log('模考答题数据已记录') |
| | | }) |
| | | }, |
| | | |
| | | // 富文本处理 |
| | | formatRichText(html) { |
| | | console.log(html); |
| | | let newContent = html.replace(/<img[^>]*>/gi, function (match, capture) { |
| | | match = match.replace(/style="[^"]+"/gi, '').replace(/style='[^']+'/gi, ''); |
| | | match = match.replace(/width="[^"]+"/gi, '').replace(/width='[^']+'/gi, ''); |
| | | match = match.replace(/height="[^"]+"/gi, '').replace(/height='[^']+'/gi, ''); |
| | | return match; |
| | | }); |
| | | newContent = newContent.replace(/style="[^"]+"/gi, function (match, capture) { |
| | | match = match |
| | | .replace(/<p>/gi, '<p class="p_class">') |
| | | .replace(/width:[^;]+;/gi, 'max-width:100%;') |
| | | .replace(/width:[^;]+;/gi, 'max-width:100%;'); |
| | | return match; |
| | | }); |
| | | newContent = newContent.replace(/<br[^>]*\/>/gi, ""); |
| | | newContent = newContent.replace(/<a>/gi, '<a class="p_class "'); |
| | | newContent = newContent.replace(/<li>/gi, '<li class="p_class "'); |
| | | newContent = newContent.replace(/\<p/gi, '<p class="p_class "'); |
| | | newContent = newContent.replace(/\<span/gi, '<span class="p_class "'); |
| | | newContent = newContent.replace(/\<img/gi, '<img style="max-width:100%;height:auto;display:block;margin-top:0;margin-bottom:0;"'); |
| | | return newContent; |
| | | } |
| | | }) |