| | |
| | | total: 0, // 题目总数 |
| | | cardList: [], // 提交项, |
| | | questionDataList: [], // 显示题目列表 |
| | | mockid: 0, |
| | | uuid: 0, |
| | | mockData: { |
| | | // 组卷信息 |
| | | state: '0', |
| | | score: 0, // 总分 |
| | | sumTime: 0, |
| | | time: 0, // 答题剩余时间 |
| | | datas: [], // 所有模考记录数据(题目列表,用户答题,考试报告) |
| | | answer: [] |
| | | } |
| | | }, |
| | | |
| | | /** |
| | |
| | | productLinkPath: options.productLinkPath ? options.productLinkPath : '', |
| | | rootCmsItemId: options.rootCmsItemId, |
| | | idPathList: options.idPathList ? JSON.parse(options.idPathList) : [], |
| | | answerType: options.answerType |
| | | answerType: options.answerType, |
| | | }); |
| | | if (this.data.answerType == 'mock') { |
| | | this.setData({ |
| | | uuid: options.uuid, |
| | | mockid: options.mockid |
| | | }) |
| | | } |
| | | this.init() |
| | | console.log('传参', options); |
| | | }, |
| | |
| | | }, |
| | | // 点击答题卡跳转题目 |
| | | goQuestion(e) { |
| | | console.log(e); |
| | | const id = e.detail.id |
| | | this.data.questionDataList.forEach((item, index) => { |
| | | if (item.id == id) { |
| | |
| | | // loadings.value = true |
| | | await this.getErrorIdList() |
| | | await this.getCollectIdList() // 获取收藏id列表 |
| | | } else if (this.data.answerType == 'mock') { |
| | | this.getErrorList() |
| | | this.getCollectIdList() |
| | | this.getMockInfo(async (res) => { |
| | | let mocklist |
| | | try { |
| | | mocklist = JSON.parse(res[0].value) |
| | | } catch (error) { |
| | | mocklist = [] |
| | | } |
| | | if (mocklist.length && this.data.uuid) { |
| | | const oldMockData = mocklist.find((mockItem) => mockItem.id == this.data.uuid) |
| | | this.setData({ |
| | | 'mockData.state': oldMockData.state, |
| | | 'mockData.score': oldMockData.score, |
| | | 'mockData.datas': mocklist, |
| | | }) |
| | | if (oldMockData.state == '0') { |
| | | // 组卷购买了,但未进入页面 |
| | | await this.getEduQuizConfig() |
| | | } else if (oldMockData.state == '1' || oldMockData.state == '2' || oldMockData.state == '3') { |
| | | // 组卷后进入过页面,但是未答过题 |
| | | let oldQuestionList = [] |
| | | oldQuestionList = await this.getMockQuestionList() |
| | | const userAnswerList = await this.getMockAnswer() |
| | | await this.getMockDataList(oldQuestionList, userAnswerList) |
| | | this.setData({ |
| | | 'mockData.sumTime': oldMockData.time, |
| | | cardList: oldQuestionList |
| | | }) |
| | | |
| | | } |
| | | } |
| | | }) |
| | | } |
| | | }, |
| | | async restart() { |
| | |
| | | this.setData({ |
| | | cardList: cardUpdatedList |
| | | }) |
| | | // console.log(this.data.questionDataList, this.data.cardList); |
| | | }, |
| | | // 题目收藏按钮,收藏和取消同一接口,取消数组减去该项id |
| | | setCollect() { |
| | |
| | | } |
| | | }) |
| | | } |
| | | // console.log('收藏', collectList.value) |
| | | }) |
| | | }, |
| | | // 获取收藏夹 |
| | |
| | | }) |
| | | }) |
| | | // loadings.value = false |
| | | // console.log('错题集', topicList.value) |
| | | }, |
| | | // 获取组卷结果 |
| | | async getEduQuizConfig() { |
| | | await app.MG.edu |
| | | .getEduQuizConfigResult({ |
| | | idOrRefCode: this.data.mockid |
| | | }) |
| | | .then(async (configRes) => { |
| | | // 获取 分数 时间 |
| | | this.setData({ |
| | | 'mockData.score': configRes.score |
| | | }) |
| | | try { |
| | | this.setData({ |
| | | 'mockData.time': JSON.parse(configRes.config).time * 1000 |
| | | }) |
| | | } catch (error) { |
| | | this.setData({ |
| | | 'mockData.time': 3600 * 1000 |
| | | }) |
| | | } |
| | | this.setData({ |
| | | 'mockData.sumTime': this.data.mockData.time |
| | | }) |
| | | let itemIds = [] |
| | | let numberIndex = 1 |
| | | // 获取抽题结果 |
| | | const cardList = configRes.eduQuizConfigStageResultList.map((item) => { |
| | | let questionIds = [] |
| | | // 获取必含题目 |
| | | let list = item.cmsItemList.map((idItem) => { |
| | | itemIds.push(idItem.id + '') |
| | | questionIds.push({ id: idItem.id + '', score: idItem.score }) |
| | | numberIndex++ |
| | | return { |
| | | number: numberIndex, |
| | | itemId: idItem.id, |
| | | score: idItem.score |
| | | } |
| | | }) |
| | | // 获取抽题题目 |
| | | let extractList = [] |
| | | for (let i = 0; i < item.generatorResultList.length; i++) { |
| | | const extractItem = item.generatorResultList[i] |
| | | let extractItemList = extractItem.cmsItemList.map((extractCmsItem) => { |
| | | itemIds.push(extractCmsItem.id + '') |
| | | questionIds.push({ id: extractCmsItem.id + '', score: extractCmsItem.score }) |
| | | numberIndex++ |
| | | return { |
| | | number: numberIndex, |
| | | itemId: extractCmsItem.id, |
| | | score: extractCmsItem.score |
| | | } |
| | | }) |
| | | extractList = extractList.concat(extractItemList) |
| | | } |
| | | return { |
| | | path: item.id, |
| | | catalogName: item.name, |
| | | infoList: list.concat(extractList) |
| | | } |
| | | }) |
| | | this.setData({ |
| | | cardList: cardList |
| | | }) |
| | | // 更新该条组卷的数据状态,包括记录改试卷总分,更改组卷状态state为1,表示已经抽题完成,并要将抽屉数据记录下来 |
| | | if (this.data.mockData.datas && this.data.mockData.datas.length) { |
| | | const mockData = this.data.mockData |
| | | mockData.datas.forEach((item, index) => { |
| | | if (item.id == this.data.uuid) { |
| | | item.state = '1' |
| | | item.time = mockData.time |
| | | item.score = configRes.score |
| | | mockData.state = '1' |
| | | } |
| | | }) |
| | | this.setData({ |
| | | mockData: mockData |
| | | }) |
| | | } |
| | | this.setMockInfo(this.data.mockData.datas) // 记录试卷总分 时长,修改state为 1 |
| | | // 更新本地mockData |
| | | this.saveMockQuestionList(this.data.cardList) // 记录题目列表 |
| | | await this.getMockDataList(this.data.cardList) // 请求题目数据 |
| | | }) |
| | | }, |
| | | |
| | | // 获取组卷数据 |
| | | getMockInfo(callback) { |
| | | app.MG.identity |
| | | .getUserKey({ |
| | | domain: 'mockData', |
| | | keys: [this.data.bookId] |
| | | }) |
| | | .then((res) => { |
| | | if (callback) callback(res) |
| | | }) |
| | | }, |
| | | // 记录购买组卷时间 |
| | | setMockInfo(data) { |
| | | app.MG.identity.setUserKey({ |
| | | setKeyRequests: [ |
| | | { |
| | | domain: 'mockData', |
| | | key: this.data.bookId + '', |
| | | value: JSON.stringify(data) |
| | | } |
| | | ] |
| | | }) |
| | | }, |
| | | // 记录组卷题目列表 |
| | | saveMockQuestionList(data) { |
| | | app.MG.identity |
| | | .setUserKey({ |
| | | setKeyRequests: [ |
| | | { |
| | | domain: 'mockQuestionData', |
| | | key: this.data.uuid, |
| | | value: JSON.stringify(data) |
| | | } |
| | | ] |
| | | }) |
| | | .then((res) => { |
| | | console.log('模考题目列表已记录') |
| | | }) |
| | | }, |
| | | // 获取记录组卷题目列表 |
| | | async getMockQuestionList() { |
| | | let list = [] |
| | | await app.MG.identity |
| | | .getUserKey({ |
| | | domain: 'mockQuestionData', |
| | | keys: [this.data.uuid] |
| | | }) |
| | | .then((res) => { |
| | | list = JSON.parse(res[0].value) |
| | | }) |
| | | return list |
| | | }, |
| | | // 获取模考用户答题数据 |
| | | async getMockAnswer() { |
| | | let data |
| | | await app.MG.identity |
| | | .getUserKey({ |
| | | domain: 'mockAnswerData', |
| | | keys: [this.data.uuid] |
| | | }) |
| | | .then((res) => { |
| | | if (res[0]) { |
| | | this.setData({ |
| | | 'mockData.time': JSON.parse(res[0].value).timem, |
| | | 'mockData.answer': JSON.parse(res[0].value).answerData |
| | | }) |
| | | 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: [] |
| | | } |
| | | } |
| | | 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) |
| | | }) |
| | | }) |
| | | }) |
| | | |
| | | this.setData({ |
| | | questionDataList: questionDataList, |
| | | loading: false |
| | | }) |
| | | } |
| | | }) |