{"version":3,"sources":["webpack:///./src/views/mock/paperTests/compontents/tabCard.vue?fe30","webpack:///./node_modules/core-js/modules/es.object.values.js","webpack:///./src/views/mock/paperTests/util/form.js","webpack:///./node_modules/core-js/internals/object-to-array.js","webpack:///./src/views/mock/paperTests/util/common.js","webpack:///./src/views/mock/paperTests/compontents/tabCard.vue","webpack:///src/views/mock/paperTests/compontents/tabCard.vue","webpack:///./src/views/mock/paperTests/compontents/tabCard.vue?0932","webpack:///./src/views/mock/paperTests/compontents/tabCard.vue?3bbe","webpack:///./src/api/paperMock.js"],"names":["$","$values","values","target","stat","O","FORM_TYPE","INPUT","TWIN_INPUT_START","TWIN_INPUT_END","RADIO","CHECKBOX","MATCH","FILL_STR_TYPE","SINGLE","TWIN_START","TWIN_END","REGEX_FILL_STR","generateQuestion","question","id","audio_url","groups","paraphrase_content","number","content","length","allQuestion","reduce","result","group","question_type","QUESTION_TYPE","NOTCOMPLETION","renderToInput","renderToMatch","MULTIPLEANSWER","MULTIPLECHOICE","TRUROrFALSE","EITHEROR","renderToOption","TITLE","renderToTitle","WRITING","renderToWrite","questionHtml","articleHtml","replaceString","marked","originalQuestionHtml","str","regex","regexBold","regexUnderline","replaceAll","description","note","questions","mode","questionStr","QUESTION_TYPE_MODE","FILL_IN_MULTIPLE_BLANKS_IMAGE","acc","cur","index","arr","fillStrMap","replace","match","replacement","options","MATCH_CHOOSE","replaceImgToA","renderToMatchTable","renderMatchOption","MATCH_TABLE","MATCH_DRAG_TO_QUESTION","titles","MATCH_FILL_IN_BANK","renderToMatchFillInBank","questionNum","questionItemStr","split","a","c","i","option","text","renderTitleOption","option_alias","type","renderToRadio","renderToCheckbox","String","fromCharCode","answerLength","answer","combineOptionStr","name","regexImg","imgTags","src","alt","aTag","matches","exec","push","curUrl","DESCRIPTORS","uncurryThis","objectKeys","toIndexedObject","$propertyIsEnumerable","f","propertyIsEnumerable","createMethod","TO_ENTRIES","it","key","keys","module","exports","entries","init","instance","$route","query","rId","method","EXERCISE_TYPE","MOCK","getMockInfo","getExerciseInfo","params","isContinue","getContinueTestsInfoApi","getBeginTestsInfoApi","Promise","resolve","reject","callback","res","setTimeout","$router","path","stepInfo","find","is_finished","details","recordId","section","getQuestion","getAnswer","answers","getBeginExerciseInfoApi","data","continueExercise","getContinueExerciseInfoApi","spent_second","PART_EXERCISE","record","getQuestionInfoApi","encrypted","JSON","parse","Base64","decode","iv","value","decryptedData","AES","decrypt","getAnswerInfoApi","answerConversion","obj","MOCK_SECTION","READING","Object","_answer","map","item","subQuestion","Number","submitAnswer","val","oldVal","findDiff","submitAnswerApi","question_id","articleList","updateAnswer","$el","initialAnswer","formItemsDom","querySelectorAll","answerMap","Array","isArray","from","forEach","dataset","questionid","formType","questionType","$set","sheet","questionId","inputEvent","e","handleInputAnswer","oninput","radioItemsDom","radioItem","qid","radioEvent","checked","removeEventListener","addEventListener","disableCheckbox","checkedItems","checkboxItemsDom","disabled","canSelectNum","checkboxItem","includes","filter","checkboxEvent","cItem","onchange","initAudio","spentSecond","audioUrls","audioTotalDurations","audio_duration","audioDurationList","window","customTotalTime","currentIndex","audioList","oldCurrentIndex","playCurrentAudio","currentAudio","play","url","audio","Audio","currentTime","volume","document","body","appendChild","getRemainingTime","getCurrentAudio","remainderTime","totalSeconds","residueTime","originInterMinute","Math","floor","interMinute","minutes","seconds","getRemainderTime","A","B","diff","render","_vm","this","_c","_self","staticClass","_l","tabList","class","active","on","$event","tabChange","_v","_s","label","title","_e","_t","staticRenderFns","components","props","defaultActive","default","watch","handler","immediate","methods","component","Fetch","exercise","GROUP_EXERCISE","finishTestApi","debounce","fn","delay","timer","clearTimeout","apply","arguments","customStartTime","Date","getTime","preQuestionId","answerQueue","createUUID","chars","uuid","random","retryCount","submit","retry","cid","LISTENING","Message","message","duration","currentUid","originData","trim","err","code","current","questionNumber","querySelector","getAttribute","showClose","submitDebounced"],"mappings":"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","file":"js/chunk-1c90c744.ec72f47c.js","sourcesContent":["export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--11-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--11-oneOf-1-1!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--11-oneOf-1-2!../../../../../node_modules/less-loader/dist/cjs.js??ref--11-oneOf-1-3!../../../../../node_modules/style-resources-loader/lib/index.js??ref--11-oneOf-1-4!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./tabCard.vue?vue&type=style&index=0&id=61f1ce64&prod&lang=less&scoped=true&\"","var $ = require('../internals/export');\nvar $values = require('../internals/object-to-array').values;\n\n// `Object.values` method\n// https://tc39.es/ecma262/#sec-object.values\n$({ target: 'Object', stat: true }, {\n values: function values(O) {\n return $values(O);\n }\n});\n","import { QUESTION_TYPE, QUESTION_TYPE_MODE } from \"@/utils/constant\";\nimport marked from \"marked\";\n\n// 表单题目类型\nexport const FORM_TYPE = {\n INPUT: 1,\n TWIN_INPUT_START: 11,\n TWIN_INPUT_END: 12,\n RADIO: 2,\n CHECKBOX: 3,\n MATCH: 4\n};\n\n// 填空字符类型\nexport const FILL_STR_TYPE = {\n SINGLE: \"[i[=NO=]]\",\n TWIN_START: \"[ii[=NO=]\",\n TWIN_END: \"[=NO=]]\"\n};\n// 匹配上面3种类型的正则\nconst REGEX_FILL_STR = /\\[\\w+\\[=\\w+=]]|\\[\\[=\\w+=]]|\\[=\\w+=]]|\\[\\w+\\[=\\w+=]/g;\n\n/**\n * 生成题目 HTML\n * @param {Object} question 题目对象\n * @param {Array} question.groups 题目组\n * @returns {Object} 包含group ID、音频 URL 和 HTML字符串 的对象 articleHtml阅读 originalQuestionHtml原题(写作)\n */\nexport function generateQuestion(question) {\n const {\n id,\n audio_url,\n groups,\n paraphrase_content,\n number,\n content\n } = question;\n if (!groups || !groups.length) {\n return;\n }\n const allQuestion = groups.reduce((result, group) => {\n if (group.question_type === QUESTION_TYPE.NOTCOMPLETION) {\n result += renderToInput(group);\n }\n if (group.question_type === QUESTION_TYPE.MATCH) {\n result += renderToMatch(group);\n }\n if (\n group.question_type === QUESTION_TYPE.MULTIPLEANSWER ||\n group.question_type === QUESTION_TYPE.MULTIPLECHOICE ||\n group.question_type === QUESTION_TYPE.TRUROrFALSE ||\n group.question_type === QUESTION_TYPE.EITHEROR\n ) {\n result += renderToOption(group);\n }\n\n if (group.question_type === QUESTION_TYPE.TITLE) {\n result += renderToTitle(group);\n }\n\n if (group.question_type === QUESTION_TYPE.WRITING) {\n result += renderToWrite(group);\n }\n return result;\n }, \"\");\n\n const questionHtml =\n `

Part ${number} ${paraphrase_content}


` +\n allQuestion;\n\n return {\n id,\n audio_url,\n articleHtml: replaceString(marked(content)),\n originalQuestionHtml: replaceString(allQuestion),\n questionHtml: replaceString(questionHtml)\n };\n}\n\n/**\n * @description 转换字符串内标识符\n */\nfunction replaceString(str) {\n const regex = /\\[HLS\\[[^\\]]*\\]\\]/g;\n const regexBold = /\\*{1,2}([^*]+)\\*{1,2}/g;\n const regexUnderline = /\\[u\\[\\s*(.*?)\\s*\\]\\]/g;\n\n return str\n .replaceAll(\"[d[=NO=]]\", \" \")\n .replaceAll(regex, \"\")\n .replaceAll(regexBold, \"$1\")\n .replaceAll(regexUnderline, \"$1\");\n}\n\n/**\n * @description 转成input\n * @param {String} group 题目字符串\n * @returns {String} 转换后的字符串\n */\nexport function renderToInput(group) {\n const { content, description, note, questions, mode } = group;\n let questionStr = \"\";\n // 兼容图片填空题\n if (+mode === +QUESTION_TYPE_MODE.FILL_IN_MULTIPLE_BLANKS_IMAGE) {\n questionStr = questions.reduce((acc, cur, index, arr) => {\n if (index < arr.length) {\n const { number, id } = questions[index];\n acc += `

${number}.

`;\n }\n return acc;\n }, \"\");\n questionStr = marked(content) + questionStr;\n } else {\n questionStr = marked(content);\n let index = 0;\n const fillStrMap = {\n [FILL_STR_TYPE.SINGLE]: FORM_TYPE.INPUT,\n [FILL_STR_TYPE.TWIN_START]: FORM_TYPE.TWIN_INPUT_START,\n [FILL_STR_TYPE.TWIN_END]: FORM_TYPE.TWIN_INPUT_END\n };\n questionStr = questionStr.replace(REGEX_FILL_STR, match => {\n if (!questions[index]) {\n return \"\";\n }\n const { number, id } = questions[index];\n const replacement = `${number}. `;\n if (match !== FILL_STR_TYPE.TWIN_START) {\n index++;\n }\n return replacement;\n });\n }\n\n return `
${note}

${marked(\n description\n )}
${questionStr}
`;\n}\n\n/**\n * @description 转成match匹配题\n */\nexport function renderToMatch(group) {\n const { description, note, questions, options, mode, content } = group;\n let questionStr = \"\";\n\n if (mode === +QUESTION_TYPE_MODE.MATCH_CHOOSE) {\n questionStr =\n `
${marked(replaceImgToA(content))}
` +\n questions.reduce((acc, cur) => {\n acc += renderToMatchTable(cur);\n return acc;\n }, \"\") +\n renderMatchOption(options);\n }\n\n if (mode === +QUESTION_TYPE_MODE.MATCH_TABLE) {\n questionStr =\n `
${marked(replaceImgToA(content))}
` +\n questions.reduce((acc, cur) => {\n acc += renderToMatchTable(cur);\n return acc;\n }, \"\");\n }\n\n if (mode === +QUESTION_TYPE_MODE.MATCH_DRAG_TO_QUESTION) {\n const regex = /<\\w+[^>]*>.*?<\\/\\w+>/g;\n const titles = marked(replaceImgToA(content)).match(regex);\n\n questionStr =\n (titles ? titles[0] : \"\") +\n questions.reduce((acc, cur) => {\n acc += renderToMatchTable(cur);\n return acc;\n }, \"\") +\n (titles ? titles[1] : \"\") +\n renderMatchOption(options);\n }\n if (mode === +QUESTION_TYPE_MODE.MATCH_FILL_IN_BANK) {\n questionStr =\n renderToMatchFillInBank(replaceImgToA(content), questions) +\n renderMatchOption(options);\n }\n\n const questionNum = questions.length\n ? `${questions[0].number} ~ ${questions[questions.length - 1].number}`\n : \"\";\n\n return `
${note}

\n
\n question ${questionNum}:\n
${marked(description)}
\n
\n ${questionStr}\n
\n
\n
`;\n}\n\nfunction renderToMatchTable(cur) {\n const questionItemStr =\n cur.content.replaceAll(\"[d[=NO=]]\", \" \") +\n `${cur.number}. `;\n return `
• ${questionItemStr}

`;\n}\nfunction renderToMatchFillInBank(content, questions) {\n return marked(content)\n .split(\"[d[=NO=]]\")\n .reduce((a, c, i, arr) => {\n a += c;\n if (i < arr.length - 1) {\n const { number, id } = questions[i];\n a += `${number}. `;\n }\n return a;\n }, \"\");\n}\n\n/**\n * @description 匹配题选项\n */\nfunction renderMatchOption(options) {\n return `
${options.reduce(\n (acc, cur) => {\n acc += `

${cur.option}. ${cur.text}

`;\n return acc;\n },\n \"\"\n )}
`;\n}\n\n/**\n * @description 标题题选项\n */\nfunction renderTitleOption(options) {\n return `
${options.reduce(\n (acc, cur) => {\n acc += `

${cur.option_alias ||\n cur.option} . ${cur.text}

`;\n return acc;\n },\n \"\"\n )}
`;\n}\n\n/**\n * @description 转成选项题\n */\nexport function renderToOption(group) {\n const { description, note, options, questions } = group;\n const questionStr = questions.reduce((acc, cur) => {\n const { type } = cur;\n if (\n type === QUESTION_TYPE.MULTIPLECHOICE ||\n type === QUESTION_TYPE.TRUROrFALSE ||\n type === QUESTION_TYPE.EITHEROR\n ) {\n acc += renderToRadio(cur);\n } else {\n acc += renderToCheckbox(cur);\n }\n\n return acc;\n }, \"\");\n\n return `
${note}

${marked(\n description\n )}
${questionStr}
`;\n}\n\n/**\n * @description 转成标题题\n */\nexport function renderToTitle(group) {\n const { content, description, note, questions, options } = group;\n const questionStr = questions.reduce((acc, cur, index) => {\n const { number, id } = cur;\n acc += `

【${String.fromCharCode(\n 65 + index\n )}】${number}.

`;\n return acc;\n }, \"\");\n return (\n `
${note}

${marked(description)}
${questionStr}
` +\n `${marked(content)}
` +\n renderTitleOption(options) +\n \"
\"\n );\n}\n\n/**\n * @description 转成checkbox多选题\n */\nexport function renderToCheckbox(cur) {\n const answerLength = cur.answer.length;\n const number =\n answerLength > 1\n ? cur.number + \" ~ \" + (cur.number + answerLength - 1)\n : cur.number;\n return `
\n
\n question ${number}:\n ${marked(cur.content)} \n
\n
\n ${combineOptionStr(cur.id, cur.options, \"checkbox\")}\n
\n
`;\n}\n\n/**\n * @description 转成radio单选题\n */\nexport function renderToRadio(cur) {\n return `
\n
\n question ${cur.number}:\n ${marked(cur.content)}\n
\n
\n ${combineOptionStr(cur.id, cur.options, \"radio\")}\n
\n
`;\n}\n\n/**\n * @description 组合选项字符串\n * @param {Array} options 选项数组\n * @param {String} name 选项name\n * @param {String} type radio | checkbox\n * @returns {String} option组合后的字符串\n */\nfunction combineOptionStr(name, options, type) {\n return options.reduce((a, c) => {\n a += `
\n \n
`;\n return a;\n }, \"\");\n}\n\nfunction renderToWrite(group) {\n const { questions } = group;\n\n return questions.reduce((acc, cur) => {\n acc += marked(cur.content);\n const regexImg = //g;\n const imgTags = acc.match(regexImg) || [];\n for (let i = 0; i < imgTags.length; i++) {\n const src = imgTags[i].match(/src=\"([^\"]+)\"/)[1];\n const alt = imgTags[i].match(/alt=\"([^\"]+)\"/)[1];\n const aTag = `\"${alt}\"`;\n acc = acc.replace(imgTags[i], aTag);\n }\n return acc;\n }, \"\");\n}\n\n/**\n * @description 匹配图片,并替换为a标签\n */\nexport function replaceImgToA(str) {\n const regex = /!\\[.*?\\]\\((https?:\\/\\/[^\\s]+)\\)/g;\n const matches = [];\n\n let match;\n while ((match = regex.exec(str)) !== null) {\n matches.push(match);\n }\n\n return matches.reduce((acc, cur) => {\n const curUrl = cur[1];\n const aTag = `\"点击查看大图\"`;\n acc = acc.replace(cur[0], aTag);\n return acc;\n }, str);\n}\n","var DESCRIPTORS = require('../internals/descriptors');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar objectKeys = require('../internals/object-keys');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar $propertyIsEnumerable = require('../internals/object-property-is-enumerable').f;\n\nvar propertyIsEnumerable = uncurryThis($propertyIsEnumerable);\nvar push = uncurryThis([].push);\n\n// `Object.{ entries, values }` methods implementation\nvar createMethod = function (TO_ENTRIES) {\n return function (it) {\n var O = toIndexedObject(it);\n var keys = objectKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) {\n key = keys[i++];\n if (!DESCRIPTORS || propertyIsEnumerable(O, key)) {\n push(result, TO_ENTRIES ? [key, O[key]] : O[key]);\n }\n }\n return result;\n };\n};\n\nmodule.exports = {\n // `Object.entries` method\n // https://tc39.es/ecma262/#sec-object.entries\n entries: createMethod(true),\n // `Object.values` method\n // https://tc39.es/ecma262/#sec-object.values\n values: createMethod(false)\n};\n","import {\n getAnswerInfoApi,\n getBeginTestsInfoApi,\n getContinueTestsInfoApi,\n getContinueExerciseInfoApi,\n getQuestionInfoApi,\n submitAnswerApi,\n getBeginExerciseInfoApi\n} from '@/api/paperMock'\nimport { Base64 } from 'js-base64'\nimport AES from '@/utils/AES'\nimport { FORM_TYPE } from '@/views/mock/paperTests/util/form'\nimport { EXERCISE_TYPE, MOCK_SECTION, QUESTION_TYPE } from '@/utils/constant'\n\n/**\n * @description 初始化获取试卷信息\n * @param {Object} instance vue实例\n * @returns {Promise} promise => {question, content, stepInfo}\n */\nexport async function init ( instance ) {\n const { rId, type } = instance.$route.query\n const method = +type === +EXERCISE_TYPE.MOCK ? getMockInfo : getExerciseInfo\n return await method(instance, rId)\n}\n\n/**\n * @description 获取模考信息\n */\nfunction getMockInfo ( instance, rId ) {\n let id = rId ? rId : instance.$route.params.id\n const isContinue = !!rId\n const method = isContinue ? getContinueTestsInfoApi : getBeginTestsInfoApi\n\n return new Promise(( resolve, reject ) => {\n method({\n id,\n callback: async res => {\n if (!res) {\n return\n }\n if (!isContinue) {\n return setTimeout(async () => {\n id = res.id\n instance.$router.replace({\n path: instance.$route.path,\n params: instance.$route.params,\n query: {\n ...instance.$route.query,\n rId: res.id\n }\n })\n const stepInfo = isContinue\n ? res.find(f => !f.is_finished) || res[ 0 ]\n : res.details[ 0 ]\n stepInfo.recordId = id\n stepInfo.section = instance.section\n const questions = await getQuestion(stepInfo)\n const answers = await getAnswer(stepInfo)\n\n return resolve({\n questions,\n answers,\n stepInfo\n })\n }, 2000)\n }\n // if( toString.call(res) === '[object Object]' ) return\n const stepInfo = isContinue\n ? res.find(f => !f.is_finished) || res[ 0 ]\n : res.details[ 0 ]\n stepInfo.recordId = id\n stepInfo.section = instance.section\n const questions = await getQuestion(stepInfo)\n const answers = await getAnswer(stepInfo)\n\n resolve({\n questions,\n answers,\n stepInfo\n })\n }\n })\n })\n}\n\n/**\n * @description 获取练习信息\n */\nfunction getExerciseInfo ( instance, rId ) {\n const id = rId ? rId : instance.$route.params.id\n const type = instance.$route.query.type\n const isContinue = !!rId\n\n return new Promise(async ( resolve, reject ) => {\n if (!isContinue) {\n await getBeginExerciseInfoApi({\n id,\n type,\n params: {\n section: instance.section\n },\n callback: async data => {\n instance.$router.replace({\n path: instance.$route.path,\n params: instance.$route.params,\n query: {\n ...instance.$route.query,\n rId: data.id\n }\n })\n const res = await continueExercise(data.id, instance.section)\n resolve(res)\n }\n })\n } else {\n const res = await continueExercise(id, instance.section)\n resolve(res)\n }\n })\n\n function continueExercise ( id, section ) {\n return new Promise(resolve => {\n getContinueExerciseInfoApi({\n id,\n callback: async ( { answers, id, spent_second } ) => {\n const stepInfo = {\n recordId: id,\n spent_second,\n section\n }\n\n const questions = await getQuestion(\n stepInfo,\n EXERCISE_TYPE.PART_EXERCISE\n )\n resolve({\n answers,\n stepInfo,\n questions\n })\n }\n })\n })\n }\n}\n\n/**\n * @description 获取题目信息\n */\nfunction getQuestion ( stepInfo, type = EXERCISE_TYPE.MOCK ) {\n let record = {\n section: stepInfo.section,\n recordId: stepInfo.recordId\n }\n return new Promise(resolve => {\n getQuestionInfoApi({\n record,\n type,\n callback: ( { encrypted } ) => {\n const { iv, value } = JSON.parse(Base64.decode(encrypted))\n const decryptedData = JSON.parse(AES.decrypt(value, '', 'CBC', iv))\n resolve(decryptedData)\n }\n })\n })\n}\n\n/**\n * @description 获取答案信息\n */\nfunction getAnswer ( stepInfo ) {\n return new Promise(resolve => {\n getAnswerInfoApi({\n record: {\n section: stepInfo.section,\n recordId: stepInfo.recordId\n },\n callback: res => {\n resolve(res)\n }\n })\n })\n}\n\nfunction answerConversion ( question, section, obj ) {\n if (section !== MOCK_SECTION.READING) return Object.values(obj)[ 0 ]\n //阅读题,且当前题目类型是 标题题的时候,需要进行答案转换\n let _answer = Object.values(obj)[ 0 ]\n question.map(item => {\n item.groups?.map(group => {\n if (group.question_type !== QUESTION_TYPE.TITLE) return\n group.questions.map(subQuestion => {\n if (subQuestion.id === Number(Object.keys(obj)[ 0 ])) {\n _answer = group.options.find(f => f.option_alias === Object.values(obj)[ 0 ]).option\n }\n })\n })\n })\n return _answer\n}\n\n/**\n * @description 提交答案\n */\nexport function submitAnswer ( instance, stepInfo, val, oldVal ) {\n const obj = findDiff(val, oldVal)\n\n submitAnswerApi({\n id: stepInfo.recordId,\n type: instance.$route.query.type,\n data: {\n question_id: Object.keys(obj)[ 0 ],\n content: answerConversion(instance.articleList, stepInfo.section, obj),\n section: stepInfo.section,\n spent_second: instance.spent_second\n }\n })\n}\n\n/**\n * @description 更新答案信息\n * @param {Object} instance vue实例\n * @param {Element} $el dom元素\n * @param {Array, Object} initialAnswer 答案数组或对象 用于更新答案\n */\nexport function updateAnswer ( instance, $el, initialAnswer = [] ) {\n const formItemsDom = $el.querySelectorAll('[data-questionid]')\n\n const answerMap = Array.isArray(initialAnswer)\n ? initialAnswer.reduce(( acc, cur ) => {\n acc[ cur.question_id ] = cur.content\n return acc\n }, {})\n : initialAnswer\n\n Array.from(formItemsDom).forEach(item => {\n // 处理questionid\n const value = answerMap[ item.dataset.questionid ] || ''\n const formType = item.dataset.questionType\n // 为提高性能,answers不深度监听\n instance.answers[ item.dataset.questionid ] = value\n instance.$set(instance.sheet, item.dataset.questionid, {\n number: item.dataset.number,\n questionId: item.dataset.questionid,\n formType: item.dataset.questionType,\n value\n })\n\n // 绑定事件\n // 填空题 和 匹配题\n if (\n +formType === +FORM_TYPE.INPUT ||\n +formType === +FORM_TYPE.MATCH ||\n +formType === +FORM_TYPE.TWIN_INPUT_START ||\n +formType === +FORM_TYPE.TWIN_INPUT_END\n ) {\n // 联合填空题\n if (+formType === +FORM_TYPE.TWIN_INPUT_START) {\n item.value = value.split('|')[ 0 ] || ''\n } else if (+formType === +FORM_TYPE.TWIN_INPUT_END) {\n item.value = value.split('|')[ 1 ] || ''\n } else {\n item.value = value\n }\n\n function inputEvent ( e ) {\n const oldVal = instance.sheet[ e.target.dataset.questionid ].value\n // 防止重复提交\n if (e.target.value === instance.answers[ e.target.dataset.questionid ]) {\n return\n }\n // // todo: 优化\n instance.answers = {\n ...instance.answers,\n [ e.target.dataset.questionid ]: handleInputAnswer(e.target.value, oldVal, +formType)\n }\n instance.sheet[ e.target.dataset.questionid ].value = handleInputAnswer(e.target.value, oldVal, +formType)\n }\n\n if (!item.oninput) {\n item.oninput = inputEvent\n }\n }\n\n // 单选题\n if (+formType === +FORM_TYPE.RADIO) {\n const radioItemsDom = item.querySelectorAll('[data-option]')\n radioItemsDom.forEach(radioItem => {\n const value = radioItem.dataset.option\n const qid = radioItem.name\n if (value === instance.answers[ qid ]) {\n radioItem.checked = true\n }\n\n function radioEvent ( e ) {\n instance.answers = {\n ...instance.answers,\n [ qid ]: value\n }\n instance.sheet[ qid ].value = value\n }\n\n radioItem.removeEventListener('change', radioEvent)\n radioItem.addEventListener('change', radioEvent)\n })\n }\n\n // 多选题\n if (+formType === +FORM_TYPE.CHECKBOX) {\n const canSelectNum = item.dataset.canSelectNum\n const checkboxItemsDom = item.querySelectorAll('[data-option]')\n\n // checkedItems 选中的checkbox\n function disableCheckbox ( checkedItems ) {\n Array.from(checkboxItemsDom).forEach(f => {\n f.disabled = checkedItems.length >= canSelectNum && !f.checked\n })\n }\n\n checkboxItemsDom.forEach(checkboxItem => {\n const qid = checkboxItem.name\n const value = checkboxItem.dataset.option\n if (instance.answers[ qid ] && instance.answers[ qid ].includes(value)) {\n checkboxItem.checked = true\n const checkedItems = Array.from(checkboxItemsDom).filter(\n f => f.checked\n )\n disableCheckbox(checkedItems)\n }\n\n function checkboxEvent ( e ) {\n const checkedItems = Array.from(checkboxItemsDom).filter(\n f => f.checked\n )\n disableCheckbox(checkedItems)\n instance.answers = {\n ...instance.answers,\n [ qid ]: checkedItems\n .map(cItem => cItem.dataset.option)\n .reduce(( a, c ) => a + c, '')\n }\n instance.sheet[ qid ].value = instance.answers[ qid ]\n }\n\n if (!item.onchange) {\n item.onchange = checkboxEvent\n }\n })\n }\n })\n}\n\n/**\n * @description 初始化音频\n * @param {Array} questions 题目数组\n * @param {Object} stepInfo 当前步骤信息\n * @returns {Function} 返回一个函数,每次调用都会返回剩余时间 和当前音频\n */\nexport function initAudio ( questions, stepInfo ) {\n const spentSecond = stepInfo.spent_second || 0\n const {\n audioUrls,\n audioTotalDurations,\n audioDurationList\n } = questions.reduce(\n ( acc, cur ) => {\n if (cur.audio_url) {\n acc.audioUrls.push(cur.audio_url)\n acc.audioTotalDurations += cur.audio_duration\n acc.audioDurationList.push(cur.audio_duration)\n }\n return acc\n },\n { audioUrls: [], audioTotalDurations: 120, audioDurationList: [] }\n )\n window.customTotalTime = audioTotalDurations\n\n let currentIndex =\n audioDurationList.reduce(( acc, cur ) => {\n if (acc + cur < spentSecond) {\n acc++\n }\n return acc\n }, 0) || 0\n const audioList = []\n // 保存第一个音频的索引\n const oldCurrentIndex = currentIndex\n\n // 创建所有音频元素并添加到页面中\n audioUrls.forEach(( url, i ) => {\n const audio = new Audio(url)\n audio.id = 'paperAudio'\n // 通过spentSecond设置当前音频的播放位置\n audio.currentTime =\n i < currentIndex\n ? audioDurationList[ i ]\n : i > currentIndex\n ? 0\n : spentSecond -\n audioDurationList.reduce(( acc, cur, index ) => {\n if (index < currentIndex) {\n acc += audioDurationList[ index ]\n }\n return acc\n }, 0)\n audio.volume = 0.5\n audioList.push(audio)\n document.body.appendChild(audio)\n })\n\n // 开始or继续 播放\n playCurrentAudio()\n\n // 播放当前音频并监听结束事件\n function playCurrentAudio () {\n const currentAudio = audioList[ currentIndex ]\n // 如果当前音频存在并且不是第一个音频就自动播放\n if (currentAudio && currentIndex !== oldCurrentIndex) {\n currentAudio.play()\n }\n currentIndex++\n if (currentIndex < audioList.length) {\n currentAudio.addEventListener('ended', playCurrentAudio)\n }\n }\n\n return {\n getRemainingTime: getRemainingTime(spentSecond, audioTotalDurations),\n getCurrentAudio: () => audioList[ currentIndex - 1 ]\n }\n}\n\n/**\n * @description 计算剩余时间\n * @param spentSecond 已用时间\n * @param totalSeconds 总时间\n * @returns {function(): {seconds: string, minutes: string|number, interMinute: number}} 返回一个函数,每次调用都会返回剩余时间\n */\nlet remainderTime = 0\n\nexport function getRemainingTime ( spentSecond, totalSeconds ) {\n let residueTime = totalSeconds + 1 - spentSecond\n return () => {\n residueTime--\n remainderTime = residueTime\n // 为了兼容老机考的头部倒计时逻辑\n const originInterMinute = Math.floor(residueTime / 60)\n const interMinute = originInterMinute + 1\n const minutes = originInterMinute < 0 ? '00' : (originInterMinute < 10 ? '0' + originInterMinute : originInterMinute)\n const seconds =\n residueTime < 0 ? '00' : (residueTime % 60 < 10 ? '0' + (residueTime % 60) : residueTime % 60)\n return { interMinute, minutes, seconds }\n }\n}\n\nexport function getRemainderTime () {\n return remainderTime\n}\n\n/**\n * @description 找出A对象对比B对象值改变的那一项\n */\nexport function findDiff ( A, B ) {\n const diff = {}\n Object.keys(A).forEach(key => {\n if (A[ key ] !== B[ key ]) {\n diff[ key ] = A[ key ]\n }\n })\n return diff\n}\n\n/**\n * @description 处理填空和联合填空题的答案\n * @param {String} value 当前输入框的值formType\n * @param {String} oldVal 旧值\n * @param {Number} formType 表单类型\n */\nexport function handleInputAnswer ( value, oldVal, formType ) {\n if (formType === FORM_TYPE.TWIN_INPUT_START) {\n return `${value}|${oldVal.split('|')[ 1 ] || ''}`\n } else if (formType === FORM_TYPE.TWIN_INPUT_END) {\n return `${oldVal.split('|')[ 0 ] || ''}|${value}`\n }\n return value\n}\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"tab-card-swapper\"},[_c('div',{staticClass:\"tab-list\"},_vm._l((_vm.tabList),function(item){return _c('div',{key:item.value,staticClass:\"label\",class:{ active: _vm.active === item.value },on:{\"click\":function($event){return _vm.tabChange(item)}}},[_vm._v(\" \"+_vm._s(item.label)+\" \")])}),0),_c('div',{staticClass:\"card-content\"},[(_vm.title)?_c('div',{staticClass:\"title-box\"},[_vm._v(_vm._s(_vm.title))]):_vm._e(),_c('div',{staticClass:\"content\"},[_vm._t(\"default\")],2)])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./tabCard.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./tabCard.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./tabCard.vue?vue&type=template&id=61f1ce64&scoped=true&\"\nimport script from \"./tabCard.vue?vue&type=script&lang=js&\"\nexport * from \"./tabCard.vue?vue&type=script&lang=js&\"\nimport style0 from \"./tabCard.vue?vue&type=style&index=0&id=61f1ce64&prod&lang=less&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"61f1ce64\",\n null\n \n)\n\nexport default component.exports","import Fetch from \"@/utils/fetch\";\nimport { EXERCISE_TYPE, MOCK_SECTION } from \"@/utils/constant\";\nimport { Message } from \"element-ui\";\n\nexport const getBeginTestsInfoApi = ({id, callback}) => {\n new Fetch(`papers/${id}/mock_records`, \"post\", \"\", callback, null, \"v1\",true);\n};\nexport const getContinueTestsInfoApi = ({id, callback}) => {\n new Fetch(`mock_records/${id}/details`, \"get\", \"\", callback, null, \"v1\",true);\n};\n\nexport const getQuestionInfoApi = ({record, callback, type = EXERCISE_TYPE.MOCK}) => {\n const path = +type === +EXERCISE_TYPE.MOCK ? `mock_records/${record.recordId}/sections/${record.section}` : `exercise_records/${record.recordId}`;\n new Fetch(`${path}/questions`, \"get\", \"\", callback, null, \"v1\",true);\n};\n\nexport const getAnswerInfoApi = ({record, callback}) => {\n new Fetch(`mock_records/${record.recordId}/sections/${record.section}/answers`, \"get\", \"\", callback, null, \"v1\",true);\n}\n\nexport const getBeginExerciseInfoApi = ({id, type, params,callback}) => {\n let exercise = ''\n switch(+type){\n case +EXERCISE_TYPE.GROUP_EXERCISE:\n exercise = 'groups'\n break;\n case +EXERCISE_TYPE.PART_EXERCISE:\n exercise = 'parts'\n break;\n default:\n exercise = 'papers'\n }\n new Fetch(`${exercise}/${id}/exercise_records`, \"post\", params, callback, null, \"v1\",true);\n}\nexport const getContinueExerciseInfoApi = ({id, callback }) => {\n new Fetch(`exercise_records/${id}`, \"get\", \"\", callback, null, \"v1\",true);\n}\n\nexport const finishTestApi = ({record, callback, type = EXERCISE_TYPE.MOCK, }) => {\n const path = +type === +EXERCISE_TYPE.MOCK ? `mock_records/${record.recordId}/sections/${record.section}/details` : `exercise_records/${record.recordId}`;\n new Fetch(`${path}/finish`, \"put\", \"\", callback, null, \"v1\",true);\n};\n\nfunction debounce(fn, delay) {\n let timer = null;\n return function () {\n if (timer) {\n clearTimeout(timer);\n }\n timer = setTimeout(() => {\n fn.apply(this, arguments);\n }, delay);\n };\n}\n\nwindow.customStartTime = new Date().getTime();\nlet preQuestionId = null;\n// 答案队列\nlet answerQueue = [];\nfunction createUUID() {\n const chars =\n \"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\";\n let uuid = \"\";\n for (let i = 0; i < 32; i++) {\n uuid += chars[Math.floor(Math.random() * 16)];\n }\n return uuid;\n}\n\n// 提交失败重试次数\nconst retryCount = 3;\nfunction submit({ id, data, callback, type }, retry = retryCount, cid) {\n return new Promise((resolve, reject) => {\n if (!data.content) {\n // reject('答案不能为空');\n return;\n }\n window.customStartTime = new Date().getTime();\n // 考试时间是否已过\n if (\n (data?.section === MOCK_SECTION.LISTENING &&\n data.spent_second > window.customTotalTime) ||\n (data?.section === MOCK_SECTION.READING && data.spent_second > 3600) ||\n (data?.section === MOCK_SECTION.WRITING && data.spent_second > 3600)\n ) {\n Message({\n type: \"error\",\n message: \"当前section时间已超时,请选择完成或重新开始~\",\n duration: 5000\n });\n return;\n }\n\n const currentUid = cid || createUUID();\n if (retry === retryCount) {\n answerQueue.push({\n currentUid,\n originData: {id, data, callback, type}\n });\n }\n const path =\n +type === +EXERCISE_TYPE.MOCK ? \"mock_records\" : \"exercise_records\";\n new Fetch(\n `${path}/${id}/answer`,\n \"put\",\n {\n ...data,\n content: data.content.trim(),\n },\n () => {\n answerQueue = answerQueue.filter(item => item.currentUid !== currentUid);\n callback && callback();\n resolve()\n },\n async (err) => {\n // code 60001 当前section结束\n if (err.code === 60001) {\n Message({\n type: \"error\",\n message: \"当前section时间已超时,请选择完成或重新开始~\",\n duration: 5000\n });\n } else {\n const current = answerQueue.find(\n item => item.currentUid === currentUid\n );\n if (retry && retry > 0) {\n await submit(current.originData, retry - 1, current.currentUid);\n } else {\n const questionNumber = document\n .querySelector(`[data-questionid=\"${data.question_id}\"]`)\n .getAttribute(\"data-number\");\n Message({\n type: \"error\",\n message: questionNumber\n ? `由于网络原因,第${questionNumber}题 答案提交失败,请重新作答`\n : \"由于网络原因,答案提交失败,请重新作答\",\n showClose: true\n });\n }\n }\n },\n \"v1\",\n true\n );\n })\n}\n\nconst submitDebounced = debounce(submit, 500);\n\nexport const submitAnswerApi = async ({\n id,\n data,\n callback,\n type = EXERCISE_TYPE.MOCK\n}) => {\n if (preQuestionId !== data.question_id) {\n await submit({ id, data, callback, type });\n } else {\n await submitDebounced({ id, data, callback, type });\n }\n preQuestionId = data.question_id;\n};\n"],"sourceRoot":""}