|
@@ -139,464 +139,463 @@
|
|
|
<button v-if="!closeTest" class="submitBtn" :class="{ hintClick: hintHandon()}">{{$t("studentWeb.exam.testpop.finish")}}</button>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <Row :gutter="30" v-if="instantPaper" style="height: calc(100% - 40px);" class="instant-paper-box">
|
|
|
- <i-col class="instant-paper" :xs="24" :sm="24" :md="12" :lg="14">
|
|
|
+ <div class="test-content">
|
|
|
+ <!-- 附件展示 -->
|
|
|
+ <div v-if="instantPaper" class="attachment-box">
|
|
|
<vuescroll>
|
|
|
<div class="img-wrap">
|
|
|
- <div v-for="(img, index) in imgList" :key="index" class="left-img" @click="$hevueImgPreview(img)">
|
|
|
- <img :src="img" alt="">
|
|
|
+ <div v-for="(img, index) in imgList" :key="index" class="left-img">
|
|
|
+ <img :src="img" alt="" @click="$hevueImgPreview(img)">
|
|
|
</div>
|
|
|
</div>
|
|
|
</vuescroll>
|
|
|
- </i-col>
|
|
|
- <i-col class="instant-exam" :xs="24" :sm="24" :md="12" :lg="10">
|
|
|
+ </div>
|
|
|
+ <!-- 题目卷动 -->
|
|
|
+ <div v-if="instantPaper || entireExam" :class="['question-content', instantPaper ? 'instant-exam' : '']" :style="{'width': instantPaper ? '40%' : '79%'}">
|
|
|
<div v-if="!showExam.length" style="text-align: center; margin-top: 25%; font-size: 20px;">
|
|
|
{{ $t("studentWeb.exam.testpop.noExam") }}
|
|
|
</div>
|
|
|
- <template v-else>
|
|
|
- <vuescroll>
|
|
|
- <div class="instant-exam-box">
|
|
|
- <div class="questionContent qamode-box" ref="questionBox" v-for="(item, index) in showExam" :key="index">
|
|
|
- <div class="questioDes">
|
|
|
+ <vuescroll>
|
|
|
+ <div class="instant-exam-box">
|
|
|
+ <div :class="['questionContent', instantPaper ? 'qamode-box' : '' ]" ref="questionBox" v-for="(item, index) in showExam" :key="index">
|
|
|
+ <div class="questioDes">
|
|
|
+ <template v-if="instantPaper">
|
|
|
<div class="que-item" v-if="item.type != 'compose' && item.parent === undefined">
|
|
|
<span v-if="isWrong" @click="changeStar(!item.star, index)" style="margin-right: 10px; cursor: pointer;">
|
|
|
<Icon custom="iconfont icon-shoucang1" size="25" v-show="!item.star" />
|
|
|
<Icon custom="iconfont icon-shoucang2" size="25" color="#FF7A4E" v-show="item.star" />
|
|
|
</span>
|
|
|
<span v-if="!['single', 'multiple', 'judge'].includes(item.type)">{{ index + 1 }}. </span>
|
|
|
- <div class="questionType"
|
|
|
- v-if="item.parent === undefined && (index === 0 ? true :
|
|
|
+ <div class="questionType" v-if="item.parent === undefined && (index === 0 ? true :
|
|
|
((item.type === 'subjective' && showExam[index-1].type === 'subjective') ? item.answerType != showExam[index-1].answerType : item.type != showExam[index-1].type))"
|
|
|
>
|
|
|
<span>{{getTestType(item.type)}}</span>
|
|
|
<span v-if="item.type === 'subjective' && item.answerType">-{{ $t(`evaluation.newExercise.answerType.${item.answerType}`) }}</span>
|
|
|
</div>
|
|
|
- <!--题目渲染-->
|
|
|
- <!-- <div id="answer-box" v-html="item.question"></div> -->
|
|
|
</div>
|
|
|
- <!-- 无综合题 -->
|
|
|
- </div>
|
|
|
- <div class="answers-box">
|
|
|
- <!--判断题选项-->
|
|
|
- <div v-if="item.type == 'judge'" align="center">
|
|
|
- <span style="font-weight: 900;">{{ index + 1 }}. </span>
|
|
|
- <label class="testBtn yesNoBtn">
|
|
|
- <input type="radio" value="A" v-model="checkers[index][0]" :disabled="!closeTest" />
|
|
|
- <div class="testbg" :style="{'background-color': isWrong && showEnd && checkers[index][0] === 'A' ? (item.answer[0] === 'A' ? '' : 'red !important') : ''}">
|
|
|
- <!-- <Icon type="ios-radio-button-off" /> -->
|
|
|
- <Icon type="md-checkmark" />
|
|
|
- </div>
|
|
|
- </label>
|
|
|
- <label class="testBtn yesNoBtn">
|
|
|
- <input type="radio" value="B" v-model="checkers[index][0]" :disabled="!closeTest" />
|
|
|
- <div class="testbg" :style="{'background-color': isWrong && showEnd && checkers[index][0] === 'B' ? (item.answer[0] === 'B' ? '' : 'red !important') : ''}">
|
|
|
- <Icon type="md-close" />
|
|
|
- </div>
|
|
|
- </label>
|
|
|
+ </template>
|
|
|
+ <template v-else>
|
|
|
+ <div class="questionType" v-if="item.parent === undefined">
|
|
|
+ <span>{{getTestType(item.type)}}</span>
|
|
|
+ <span v-if="item.type === 'subjective' && showExam[index].answerType">-{{ $t(`evaluation.newExercise.answerType.${showExam[index].answerType}`) }}</span>
|
|
|
</div>
|
|
|
- <!--选择题选项-->
|
|
|
- <div class="select-box" v-else-if="item.type === 'single' || item.type === 'multiple'">
|
|
|
- <span style="font-weight: 900;">{{ index + 1 }}. </span>
|
|
|
- <label class="testBtn" v-for="(option, oIndex) in item.option" :key="oIndex">
|
|
|
- <input type="checkbox" :value="option.code" v-model="checkers[index]" @click="getAns(index, oIndex)" :disabled="!closeTest" />
|
|
|
- <div class="testbg">
|
|
|
- <div style="display:flex">
|
|
|
- <span>{{ option.code }}</span>
|
|
|
- <div v-html="option.value" @click.stop.native.prevent="showImg($event)"></div>
|
|
|
- <span v-show="showEnd" style="margin-left: 5px;">
|
|
|
- <Icon type="md-checkmark-circle" color="#44b5f9" size="20" v-if="item.answer.includes(option.code)" />
|
|
|
- <Icon type="md-close-circle" color="red" size="20" v-if="checkers[index].includes(option.code) && !item.answer.includes(option.code)" />
|
|
|
- </span>
|
|
|
- </div>
|
|
|
- <div style="clear:both"></div>
|
|
|
- </div>
|
|
|
- </label>
|
|
|
+ <div class="que-item" v-if="item.type != 'compose' && item.parent === undefined">
|
|
|
+ <span v-if="isWrong" @click="changeStar(!item.star, index)" style="margin-right: 10px; cursor: pointer;">
|
|
|
+ <Icon custom="iconfont icon-shoucang1" size="25" v-show="!item.star" />
|
|
|
+ <Icon custom="iconfont icon-shoucang2" size="25" color="#FF7A4E" v-show="item.star" />
|
|
|
+ </span>
|
|
|
+ <span>{{ index + 1 }}.</span>
|
|
|
+ <!--题目渲染-->
|
|
|
+ <div id="answer-box" v-html="item.question"></div>
|
|
|
</div>
|
|
|
- <!--问答题-->
|
|
|
- <div class="compose-content" v-else-if="item.type === 'subjective'">
|
|
|
- <!-- item.answerType: text(文本) Image(图片) file(文件) audio(音频 useAutoScore(自动评分) answerLang(语言)) -->
|
|
|
- <!-- <template v-if="item.answerType === 'text' || item.answerType === 'text_Image'"> -->
|
|
|
- <Input v-if="item.answerType === 'text'" v-model="checkers[index][0]" type="textarea" :rows="5" :autosize="{minRows: 5,maxRows: 10}" :placeholder="$t('studentWeb.exam.inputAnswers')"></Input>
|
|
|
- <Compose v-else-if="item.answerType === 'text_Image'" ref="compose" :itemInfo="item" :close="!closeTest" :textData="checkers[index]" :index="index" @dataGet="getComposeAns"></Compose>
|
|
|
- <!-- </template> -->
|
|
|
- <template v-else-if="item.answerType === 'audio'">
|
|
|
- <AudioRecorder :textData="checkers[index]" :index="index" @dataGet="getComposeAns" />
|
|
|
- </template>
|
|
|
- <template v-else-if="item.answerType === 'file' || item.answerType === 'image'">
|
|
|
- <Upload type="drag" :accept="subjectiveAccept(item)" action="" :before-upload="file => customUpload(file, index)">
|
|
|
- <div style="padding: 20px 0" ref="upload1">
|
|
|
- <Icon type="ios-cloud-upload" size="52" :style="{color: checkers[index].length ? '#b4b4b4' : '#2d8cf0' }"></Icon>
|
|
|
- <p>
|
|
|
- <span>
|
|
|
- {{ checkers[index].length ? $t('jyzx.offline.againLoad') : $t('studentWeb.art.relatedFile')}}
|
|
|
- </span>
|
|
|
- </p>
|
|
|
- </div>
|
|
|
- </Upload>
|
|
|
- <div class="repair-link-wrap-item-box" v-if="checkers[index].length">
|
|
|
- <div class="file-icon">
|
|
|
- <img :src="$tools.getFileThum(getFileType(checkers[index][0]), getFileName(checkers[index][0]))"/>
|
|
|
- </div>
|
|
|
- <div class="file-info">
|
|
|
- <p class="file-name">{{ getFileName(checkers[index][0]) }}</p>
|
|
|
- <div>
|
|
|
- <span @click="onPreview(checkers[index][0], true)">{{ $t('ability.review.preview')}}</span>
|
|
|
- <span @click="onDownload(checkers[index][0], true)">{{ $t('ability.review.download')}}</span>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
+ <!-- 综合题 -->
|
|
|
+ <div v-if="item.type === 'compose' || item.parent !== undefined">
|
|
|
+ <div class="compose-content" v-if="item.parent !== undefined">
|
|
|
+ <div class="questionType" v-show="entireExam ? item.pid != showExam[index-1].pid : true">
|
|
|
+ <span>{{getTestType(item.parentInfo.type)}}</span>
|
|
|
+ <span v-if="item.type === 'subjective' && showExam[index].answerType">({{ $t(`evaluation.newExercise.answerType.${showExam[index].answerType}`) }})</span>
|
|
|
</div>
|
|
|
- </template>
|
|
|
- <div class="compose-content" v-else>
|
|
|
- <Compose ref="compose" :itemInfo="item" :close="!closeTest" :textData="checkers[index]" :index="index" @dataGet="getComposeAns"></Compose>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="compose-content" v-else>
|
|
|
- <Compose ref="compose" :itemInfo="item" :close="!closeTest" :textData="checkers[index]" :index="index" @dataGet="getComposeAns"></Compose>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <!-- <div :style="isCheckAns ? 'height: 250px' : ''"></div> -->
|
|
|
- <!-- 答案解析 -->
|
|
|
- <div v-if="isWrong && showEnd" :class="['analysis', showEnd ? 'active' : '']" @click="changeAnalysisType(true)">
|
|
|
- <div class="item-explain">
|
|
|
- <span class="explain-title">【{{ $t("studentWeb.exam.report.ansRes") }}】</span>
|
|
|
- <div class="item-explain-details">
|
|
|
- <span v-if="!checkers[index].length">{{ $t('studentWeb.exam.report.noAns') }}</span>
|
|
|
- <span v-else v-for="(item, index) in checkers[index]" :key="index" v-html="item"></span>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="item-explain">
|
|
|
- <span class="explain-title">【{{ $t("studentWeb.exam.report.testAns") }}】</span>
|
|
|
- <div class="item-explain-details">
|
|
|
- <span v-if="!item.answer.length">{{ $t('studentWeb.exam.report.noAns') }}</span>
|
|
|
- <span v-else v-for="(item, index) in item.answer" :key="index" v-html="item"></span>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="item-explain">
|
|
|
- <span class="explain-title">【{{ $t("studentWeb.exam.report.testAnalyse") }}】</span>
|
|
|
- <div class="item-explain-details">
|
|
|
- <div v-html="item.explain ? item.explain : $t('studentWeb.exam.report.noAnalyse')"></div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <!-- 知识点 -->
|
|
|
- <div class="item-explain">
|
|
|
- <span class="explain-title">【{{ $t("studentWeb.exam.report.knowledge") }}】</span>
|
|
|
- <div v-if="item.knowledge && item.knowledge.length" class="item-explain-details">
|
|
|
- <span v-for="(knowledge, index) in item.knowledge" :key="index" class="knowledge-style">
|
|
|
- {{ knowledge }}
|
|
|
- </span>
|
|
|
- </div>
|
|
|
- <div v-else class="item-explain-details">
|
|
|
- {{ $t("studentWeb.exam.report.noKnowledge") }}
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <!-- 认知层次 -->
|
|
|
- <div class="item-explain">
|
|
|
- <span class="explain-title">【{{ $t("studentWeb.exam.report.filed") }}】</span>
|
|
|
- <div class="item-explain-details">
|
|
|
- <div>{{ levelList[item.field - 1] }}</div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="item-explain">
|
|
|
- <span class="explain-title">【{{ $t("studentWeb.exam.report.repairSource") }}】</span>
|
|
|
- <div class="item-explain-details-repair">
|
|
|
- <div v-if="item.repair.length != 0">
|
|
|
- <div v-for="(repairSource, normalIndex) in item.repair" :key="normalIndex" class="repair-link-wrap-item-box">
|
|
|
- <div class="file-icon">
|
|
|
- <img :src="$tools.getFileThum(repairSource.type, repairSource.name)"/>
|
|
|
- </div>
|
|
|
- <div class="file-info">
|
|
|
- <p class="file-name">{{ repairSource.name }}</p>
|
|
|
- <div>
|
|
|
- <span @click.stop="onPreview(repairSource)" v-if="repairSource.type !== 'other'">{{ $t('ability.review.preview')}}</span>
|
|
|
- <span @click.stop="onDownload(repairSource)" v-if="repairSource.type !== 'link'">{{ $t('ability.review.download')}}</span>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
+ <div class="compose-box" v-show="entireExam ? item.pid != showExam[index-1].pid : true">
|
|
|
+ <span v-if="isWrong" @click="changeStar(!item.star, index, true)" style="cursor: pointer;">
|
|
|
+ <Icon custom="iconfont icon-shoucang1" size="25" v-show="!item.star" />
|
|
|
+ <Icon custom="iconfont icon-shoucang2" size="25" color="#FF7A4E" v-show="item.star" />
|
|
|
+ </span>
|
|
|
+ <span style="margin-left:10px;font-weight:800;font-size:15px">{{$t("studentWeb.exam.testpop.queNo")}}</span>
|
|
|
+ <br />
|
|
|
+ <div class="compose-item">
|
|
|
+ <!--<span w>{{ item.parent + 1}}.</span>-->
|
|
|
+ <!--题干渲染-->
|
|
|
+ <div v-html="item.parentInfo.question"></div>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <div v-else-if="!item.repair.length">
|
|
|
- {{ $t('studentWeb.exam.report.noSource') }}
|
|
|
+ <div class="que-content">
|
|
|
+ <span style="width:51px">{{ item.paperIndex}}:</span>
|
|
|
+ <!--题目渲染-->
|
|
|
+ <div class="que-items" id="answer-box" v-html="item.question"></div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
- </div>
|
|
|
+ </template>
|
|
|
</div>
|
|
|
- </div>
|
|
|
- </vuescroll>
|
|
|
- </template>
|
|
|
- </i-col>
|
|
|
- </Row>
|
|
|
- <Row :gutter="30" v-else>
|
|
|
- <!-- 题干 -->
|
|
|
- <i-col :class="['questionArea', {'qamode-area': instantPaper}]"
|
|
|
- :xs="24"
|
|
|
- :sm="24"
|
|
|
- :md="18"
|
|
|
- :lg="20"
|
|
|
- >
|
|
|
- <div class="img-wrap" v-if="instantPaper">
|
|
|
- <Carousel v-model="CarouselIndex">
|
|
|
- <CarouselItem v-for="(img, indexs) in imgList" :key="indexs">
|
|
|
- <!-- 不是综合题 -->
|
|
|
- <div class="left-img" @click="$hevueImgPreview(img)">
|
|
|
- <img :src="img" alt="">
|
|
|
- </div>
|
|
|
- </CarouselItem>
|
|
|
- </Carousel>
|
|
|
- <p class="page-footer">
|
|
|
- {{ $t('answerSheet.tip2') }} {{ CarouselIndex + 1 }} {{ $t('answerSheet.tip21') }}
|
|
|
- /
|
|
|
- {{ $t('answerSheet.tip9') }} {{ imgList.length }} {{ $t('answerSheet.tip21') }}
|
|
|
- </p>
|
|
|
- </div>
|
|
|
- <template>
|
|
|
- <!--切換頁-->
|
|
|
- <div class="small-view">
|
|
|
- <div class="countDown" v-if="needCountDown">
|
|
|
- <div>{{$t("studentWeb.exam.examTime")}}:{{ surplus }}</div>
|
|
|
- </div>
|
|
|
- <div class="pageCtl2">
|
|
|
- <button @click="preQ()" :disabled="!queNo" :class="{disable: !queNo}">
|
|
|
- <Icon type="ios-arrow-back" />{{$t("studentWeb.exam.testpop.previous")}}
|
|
|
- </button>
|
|
|
- <button @click="showPage(true)">
|
|
|
- {{$t("studentWeb.exam.testpop.showPage")}}
|
|
|
- </button>
|
|
|
- <button @click="nextQ()"
|
|
|
- :disabled="queNo == (showExam.length-1)"
|
|
|
- :class="{ hintClick:queNo != (showExam.length-1) && checkers[queNo] != '',disable: queNo == (showExam.length-1)}">
|
|
|
- {{$t("studentWeb.exam.testpop.next")}}
|
|
|
- <Icon type="ios-arrow-forward" />
|
|
|
- </button>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div :class="['questionContent', {'qamode-box': instantPaper}]" ref="questionBox" v-if="showExam.length">
|
|
|
- <!-- <span class="hintwrap">
|
|
|
- <Tooltip :content="$t('studentWeb.exam.report.noSource')" theme="light" placement="left">
|
|
|
- <span class="hintIcon">
|
|
|
- <svg-icon icon-class="hint" />
|
|
|
- </span>
|
|
|
- </Tooltip>
|
|
|
- </span> -->
|
|
|
- <div class="questioDes">
|
|
|
- <div class="questionType" v-if="getQue(queNo).parent === undefined">
|
|
|
- <span>{{getTestType(getQue(queNo).type)}}</span>
|
|
|
- <span v-if="getQue(queNo).type === 'subjective' && showExam[queNo].answerType">-{{ $t(`evaluation.newExercise.answerType.${showExam[queNo].answerType}`) }}</span>
|
|
|
- </div>
|
|
|
- <div class="que-item" v-if="getQue(queNo).type != 'compose' && getQue(queNo).parent === undefined">
|
|
|
- <span v-if="isWrong" @click="changeStar(!getQue(queNo).star, queNo)" style="margin-right: 10px; cursor: pointer;">
|
|
|
- <Icon custom="iconfont icon-shoucang1" size="25" v-show="!getQue(queNo).star" />
|
|
|
- <Icon custom="iconfont icon-shoucang2" size="25" color="#FF7A4E" v-show="getQue(queNo).star" />
|
|
|
- </span>
|
|
|
- <span>{{ queNo + 1 }}.</span>
|
|
|
- <!--题目渲染-->
|
|
|
- <div id="answer-box" v-html="getQue(queNo).question"></div>
|
|
|
- </div>
|
|
|
- <!--综合题-->
|
|
|
- <div v-if="getQue(queNo).type === 'compose' || getQue(queNo).parent !== undefined">
|
|
|
- <div class="compose-content" v-if="getQue(queNo).parent !== undefined">
|
|
|
- <div class="questionType">
|
|
|
- <span>{{getTestType(getQue(queNo).parentInfo.type)}}</span>
|
|
|
- <span v-if="getQue(queNo).type === 'subjective' && showExam[queNo].answerType">({{ $t(`evaluation.newExercise.answerType.${showExam[queNo].answerType}`) }})</span>
|
|
|
- </div>
|
|
|
- <div class="compose-box">
|
|
|
- <span v-if="isWrong" @click="changeStar(!getQue(queNo).star, queNo, true)" style="cursor: pointer;">
|
|
|
- <Icon custom="iconfont icon-shoucang1" size="25" v-show="!getQue(queNo).star" />
|
|
|
- <Icon custom="iconfont icon-shoucang2" size="25" color="#FF7A4E" v-show="getQue(queNo).star" />
|
|
|
- </span>
|
|
|
- <span style="margin-left:10px;font-weight:800;font-size:15px">{{$t("studentWeb.exam.testpop.queNo")}}</span>
|
|
|
- <br />
|
|
|
- <div class="compose-item">
|
|
|
- <!--<span w>{{ getQue(queNo).parent + 1}}.</span>-->
|
|
|
- <!--题干渲染-->
|
|
|
- <div v-html="getQue(queNo).parentInfo.question"></div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="que-content">
|
|
|
- <span style="width:51px">{{ getQue(queNo).paperIndex}}:</span>
|
|
|
- <!--题目渲染-->
|
|
|
- <div class="que-items" id="answer-box" v-html="getQue(queNo).question"></div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="answers">
|
|
|
- <div class="questionNo">{{$t("studentWeb.exam.testpop.myAns")}}</div>
|
|
|
- <div class="answers-box">
|
|
|
+ <div class="answers-box" :style="{'margin-top': instantPaper ? 'auto': '20px'}">
|
|
|
+ <div class="questionNo" v-if="!instantPaper">{{$t("studentWeb.exam.testpop.myAns")}}</div>
|
|
|
<!--判断题选项-->
|
|
|
- <div v-if="getQue(queNo).type == 'judge'" align="center">
|
|
|
- <!-- <div class="testButn">
|
|
|
- <Radio-group v-model="checkers[queNo][0]">
|
|
|
- <Radio label="A"><Icon type="md-checkmark" /></Radio>
|
|
|
- <Radio label="B"><Icon type="md-close" /></Radio>
|
|
|
- </Radio-group>
|
|
|
- </div> -->
|
|
|
+ <div v-if="item.type == 'judge'" align="center">
|
|
|
+ <span style="font-weight: 900;" v-if="instantPaper">{{ index + 1 }}. </span>
|
|
|
<label class="testBtn yesNoBtn">
|
|
|
- <input type="radio" value="A" v-model="checkers[queNo][0]" :disabled="!closeTest" />
|
|
|
- <div class="testbg" :style="{'background-color': isWrong && showEnd && checkers[queNo][0] === 'A' ? (getQue(queNo).answer[0] === 'A' ? '' : 'red !important') : ''}">
|
|
|
+ <input type="radio" value="A" v-model="checkers[index][0]" :disabled="!closeTest" />
|
|
|
+ <div class="testbg" :style="{'background-color': isWrong && showEnd && checkers[index][0] === 'A' ? (item.answer[0] === 'A' ? '' : 'red !important') : ''}">
|
|
|
<!-- <Icon type="ios-radio-button-off" /> -->
|
|
|
<Icon type="md-checkmark" />
|
|
|
</div>
|
|
|
</label>
|
|
|
<label class="testBtn yesNoBtn">
|
|
|
- <input type="radio" value="B" v-model="checkers[queNo][0]" :disabled="!closeTest" />
|
|
|
- <div class="testbg" :style="{'background-color': isWrong && showEnd && checkers[queNo][0] === 'B' ? (getQue(queNo).answer[0] === 'B' ? '' : 'red !important') : ''}">
|
|
|
+ <input type="radio" value="B" v-model="checkers[index][0]" :disabled="!closeTest" />
|
|
|
+ <div class="testbg" :style="{'background-color': isWrong && showEnd && checkers[index][0] === 'B' ? (item.answer[0] === 'B' ? '' : 'red !important') : ''}">
|
|
|
<Icon type="md-close" />
|
|
|
</div>
|
|
|
</label>
|
|
|
</div>
|
|
|
<!--选择题选项-->
|
|
|
- <div class="select-box" v-else-if="getQue(queNo).type === 'single' || getQue(queNo).type === 'multiple'">
|
|
|
- <label class="testBtn"
|
|
|
- v-for="(item, index) in getQue(queNo).option"
|
|
|
- :key="index">
|
|
|
- <span v-show="showEnd">
|
|
|
- <Icon type="md-checkmark-circle" color="#24B880" size="20"
|
|
|
- v-if="getQue(queNo).answer.includes(item.code)"
|
|
|
- />
|
|
|
- <Icon type="md-close-circle" color="red" size="20"
|
|
|
- v-if="checkers[queNo].includes(item.code) && !getQue(queNo).answer.includes(item.code)"
|
|
|
- />
|
|
|
- </span>
|
|
|
- <input type="checkbox"
|
|
|
- :value="getQue(queNo).option[index].code"
|
|
|
- v-model="checkers[queNo]"
|
|
|
- @click="getAns(queNo,index)"
|
|
|
- :disabled="!closeTest" />
|
|
|
+ <div class="select-box" v-else-if="item.type === 'single' || item.type === 'multiple'">
|
|
|
+ <span style="font-weight: 900;" v-if="instantPaper">{{ index + 1 }}. </span>
|
|
|
+ <label class="testBtn" v-for="(option, oIndex) in item.option" :key="oIndex">
|
|
|
+ <input type="checkbox" :value="option.code" v-model="checkers[index]" @click="getAns(index, oIndex)" :disabled="!closeTest" />
|
|
|
<div class="testbg">
|
|
|
<div style="display:flex">
|
|
|
- <span>{{ getQue(queNo).option[index].code }}. </span>
|
|
|
- <div v-html="item.value" @click.stop.native.prevent="showImg($event)"></div>
|
|
|
+ <span>{{ option.code }}</span>
|
|
|
+ <div v-html="option.value" @click.stop.native.prevent="showImg($event)"></div>
|
|
|
+ <span v-show="showEnd" style="margin-left: 5px;">
|
|
|
+ <Icon type="md-checkmark-circle" color="#44b5f9" size="20" v-if="item.answer.includes(option.code)" />
|
|
|
+ <Icon type="md-close-circle" color="red" size="20" v-if="checkers[index].includes(option.code) && !item.answer.includes(option.code)" />
|
|
|
+ </span>
|
|
|
</div>
|
|
|
<div style="clear:both"></div>
|
|
|
</div>
|
|
|
</label>
|
|
|
</div>
|
|
|
<!--问答题-->
|
|
|
- <div class="compose-content" v-else-if="getQue(queNo).type === 'subjective'">
|
|
|
- <!-- showExam[queNo].answerType: text(文本) Image(图片) file(文件) audio(音频 useAutoScore(自动评分) answerLang(语言)) -->
|
|
|
- <!-- <template v-if="showExam[queNo].answerType === 'text' || showExam[queNo].answerType === 'text_Image'"> -->
|
|
|
- <Input v-if="showExam[queNo].answerType === 'text'" v-model="checkers[queNo][0]" type="textarea" :rows="5" :autosize="{minRows: 5,maxRows: 10}" :placeholder="$t('studentWeb.exam.inputAnswers')"></Input>
|
|
|
- <Compose v-else-if="showExam[queNo].answerType === 'text_Image'" ref="compose" :itemInfo="getQue(queNo)" :close="!closeTest" :textData="checkers[queNo]" :index="queNo" @dataGet="getComposeAns"></Compose>
|
|
|
+ <div class="compose-content" v-else-if="item.type === 'subjective'">
|
|
|
+ <!-- item.answerType: text(文本) Image(图片) file(文件) audio(音频 useAutoScore(自动评分) answerLang(语言)) -->
|
|
|
+ <!-- <template v-if="item.answerType === 'text' || item.answerType === 'text_Image'"> -->
|
|
|
+ <Input v-if="item.answerType === 'text'" v-model="checkers[index][0]" type="textarea" :rows="5" :autosize="{minRows: 5,maxRows: 10}" :placeholder="$t('studentWeb.exam.inputAnswers')"></Input>
|
|
|
+ <Compose v-else-if="item.answerType === 'text_Image'" ref="compose" :itemInfo="item" :close="!closeTest" :textData="checkers[index]" :index="index" @dataGet="getComposeAns"></Compose>
|
|
|
<!-- </template> -->
|
|
|
- <template v-else-if="showExam[queNo].answerType === 'audio'">
|
|
|
- <AudioRecorder :textData="checkers[queNo]" :index="queNo" @dataGet="getComposeAns" />
|
|
|
+ <template v-else-if="item.answerType === 'audio'">
|
|
|
+ <AudioRecorder :textData="checkers[index]" :index="index" @dataGet="getComposeAns" />
|
|
|
</template>
|
|
|
- <template v-else-if="showExam[queNo].answerType === 'file' || showExam[queNo].answerType === 'image'">
|
|
|
- <Upload type="drag" :accept="subjectiveAccept(showExam[queNo])" action="" :before-upload="file => customUpload(file, queNo)">
|
|
|
+ <template v-else-if="item.answerType === 'file' || item.answerType === 'image'">
|
|
|
+ <Upload type="drag" :accept="subjectiveAccept(item)" action="" :before-upload="file => customUpload(file, index)">
|
|
|
<div style="padding: 20px 0" ref="upload1">
|
|
|
- <Icon type="ios-cloud-upload" size="52" :style="{color: checkers[queNo].length ? '#b4b4b4' : '#2d8cf0' }"></Icon>
|
|
|
+ <Icon type="ios-cloud-upload" size="52" :style="{color: checkers[index].length ? '#b4b4b4' : '#2d8cf0' }"></Icon>
|
|
|
<p>
|
|
|
<span>
|
|
|
- {{ checkers[queNo].length ? $t('jyzx.offline.againLoad') : $t('studentWeb.art.relatedFile')}}
|
|
|
+ {{ checkers[index].length ? $t('jyzx.offline.againLoad') : $t('studentWeb.art.relatedFile')}}
|
|
|
</span>
|
|
|
</p>
|
|
|
</div>
|
|
|
</Upload>
|
|
|
- <div class="repair-link-wrap-item-box" v-if="checkers[queNo].length">
|
|
|
+ <div class="repair-link-wrap-item-box" v-if="checkers[index].length">
|
|
|
<div class="file-icon">
|
|
|
- <img :src="$tools.getFileThum(getFileType(checkers[queNo][0]), getFileName(checkers[queNo][0]))"/>
|
|
|
+ <img :src="$tools.getFileThum(getFileType(checkers[index][0]), getFileName(checkers[index][0]))"/>
|
|
|
</div>
|
|
|
<div class="file-info">
|
|
|
- <p class="file-name">{{ getFileName(checkers[queNo][0]) }}</p>
|
|
|
+ <p class="file-name">{{ getFileName(checkers[index][0]) }}</p>
|
|
|
<div>
|
|
|
- <span @click="onPreview(checkers[queNo][0], true)">{{ $t('ability.review.preview')}}</span>
|
|
|
- <span @click="onDownload(checkers[queNo][0], true)">{{ $t('ability.review.download')}}</span>
|
|
|
+ <span @click="onPreview(checkers[index][0], true)">{{ $t('ability.review.preview')}}</span>
|
|
|
+ <span @click="onDownload(checkers[index][0], true)">{{ $t('ability.review.download')}}</span>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</template>
|
|
|
<div class="compose-content" v-else>
|
|
|
- <Compose ref="compose" :itemInfo="getQue(queNo)" :close="!closeTest" :textData="checkers[queNo]" :index="queNo" @dataGet="getComposeAns"></Compose>
|
|
|
+ <Compose ref="compose" :itemInfo="item" :close="!closeTest" :textData="checkers[index]" :index="index" @dataGet="getComposeAns"></Compose>
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="compose-content" v-else>
|
|
|
- <Compose ref="compose" :itemInfo="getQue(queNo)" :close="!closeTest" :textData="checkers[queNo]" :index="queNo" @dataGet="getComposeAns"></Compose>
|
|
|
+ <Compose ref="compose" :itemInfo="item" :close="!closeTest" :textData="checkers[index]" :index="index" @dataGet="getComposeAns"></Compose>
|
|
|
</div>
|
|
|
</div>
|
|
|
- </div>
|
|
|
- <!-- <div :style="isCheckAns ? 'height: 250px' : ''"></div> -->
|
|
|
- <!-- 答案解析 -->
|
|
|
- <div v-if="isWrong" :class="['analysis', showEnd ? 'active' : '']" @click="changeAnalysisType(true)">
|
|
|
- <div class="item-explain">
|
|
|
- <span class="explain-title">【{{ $t("studentWeb.exam.report.ansRes") }}】</span>
|
|
|
- <div class="item-explain-details">
|
|
|
- <span v-if="!checkers[queNo].length">{{ $t('studentWeb.exam.report.noAns') }}</span>
|
|
|
- <span v-else v-for="(item, index) in checkers[queNo]" :key="index" v-html="item"></span>
|
|
|
+ <!-- <div :style="isCheckAns ? 'height: 250px' : ''"></div> -->
|
|
|
+ <!-- 答案解析 -->
|
|
|
+ <div v-if="isWrong && showEnd" :class="['analysis', showEnd ? 'active' : '']" @click="changeAnalysisType(true)">
|
|
|
+ <div class="item-explain">
|
|
|
+ <span class="explain-title">【{{ $t("studentWeb.exam.report.ansRes") }}】</span>
|
|
|
+ <div class="item-explain-details">
|
|
|
+ <span v-if="!checkers[index].length">{{ $t('studentWeb.exam.report.noAns') }}</span>
|
|
|
+ <span v-else v-for="(item, index) in checkers[index]" :key="index" v-html="item"></span>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
- </div>
|
|
|
- <div class="item-explain">
|
|
|
- <span class="explain-title">【{{ $t("studentWeb.exam.report.testAns") }}】</span>
|
|
|
- <div class="item-explain-details">
|
|
|
- <span v-if="!showExam[queNo].answer.length">{{ $t('studentWeb.exam.report.noAns') }}</span>
|
|
|
- <span v-else v-for="(item, index) in showExam[queNo].answer" :key="index" v-html="item"></span>
|
|
|
+ <div class="item-explain">
|
|
|
+ <span class="explain-title">【{{ $t("studentWeb.exam.report.testAns") }}】</span>
|
|
|
+ <div class="item-explain-details">
|
|
|
+ <span v-if="!item.answer.length">{{ $t('studentWeb.exam.report.noAns') }}</span>
|
|
|
+ <span v-else v-for="(item, index) in item.answer" :key="index" v-html="item"></span>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
- </div>
|
|
|
- <div class="item-explain">
|
|
|
- <span class="explain-title">【{{ $t("studentWeb.exam.report.testAnalyse") }}】</span>
|
|
|
- <div class="item-explain-details">
|
|
|
- <div v-html="showExam[queNo].explain ? showExam[queNo].explain : $t('studentWeb.exam.report.noAnalyse')"></div>
|
|
|
+ <div class="item-explain">
|
|
|
+ <span class="explain-title">【{{ $t("studentWeb.exam.report.testAnalyse") }}】</span>
|
|
|
+ <div class="item-explain-details">
|
|
|
+ <div v-html="item.explain ? item.explain : $t('studentWeb.exam.report.noAnalyse')"></div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <!-- 知识点 -->
|
|
|
+ <div class="item-explain">
|
|
|
+ <span class="explain-title">【{{ $t("studentWeb.exam.report.knowledge") }}】</span>
|
|
|
+ <div v-if="item.knowledge && item.knowledge.length" class="item-explain-details">
|
|
|
+ <span v-for="(knowledge, index) in item.knowledge" :key="index" class="knowledge-style">
|
|
|
+ {{ knowledge }}
|
|
|
+ </span>
|
|
|
+ </div>
|
|
|
+ <div v-else class="item-explain-details">
|
|
|
+ {{ $t("studentWeb.exam.report.noKnowledge") }}
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <!-- 认知层次 -->
|
|
|
+ <div class="item-explain">
|
|
|
+ <span class="explain-title">【{{ $t("studentWeb.exam.report.filed") }}】</span>
|
|
|
+ <div class="item-explain-details">
|
|
|
+ <div>{{ levelList[item.field - 1] }}</div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="item-explain">
|
|
|
+ <span class="explain-title">【{{ $t("studentWeb.exam.report.repairSource") }}】</span>
|
|
|
+ <div class="item-explain-details-repair">
|
|
|
+ <div v-if="item.repair.length != 0">
|
|
|
+ <div v-for="(repairSource, normalIndex) in item.repair" :key="normalIndex" class="repair-link-wrap-item-box">
|
|
|
+ <div class="file-icon">
|
|
|
+ <img :src="$tools.getFileThum(repairSource.type, repairSource.name)"/>
|
|
|
+ </div>
|
|
|
+ <div class="file-info">
|
|
|
+ <p class="file-name">{{ repairSource.name }}</p>
|
|
|
+ <div>
|
|
|
+ <span @click.stop="onPreview(repairSource)" v-if="repairSource.type !== 'other'">{{ $t('ability.review.preview')}}</span>
|
|
|
+ <span @click.stop="onDownload(repairSource)" v-if="repairSource.type !== 'link'">{{ $t('ability.review.download')}}</span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div v-else-if="!item.repair.length">
|
|
|
+ {{ $t('studentWeb.exam.report.noSource') }}
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <!-- 知识点 -->
|
|
|
- <div class="item-explain">
|
|
|
- <span class="explain-title">【{{ $t("studentWeb.exam.report.knowledge") }}】</span>
|
|
|
- <div v-if="showExam[queNo].knowledge && showExam[queNo].knowledge.length" class="item-explain-details">
|
|
|
- <span v-for="(knowledge, index) in showExam[queNo].knowledge" :key="index" class="knowledge-style">
|
|
|
- {{ knowledge }}
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </vuescroll>
|
|
|
+ </div>
|
|
|
+ <!-- 单题展示 -->
|
|
|
+ <div v-if="!instantPaper && !entireExam" class="question-content">
|
|
|
+ <div v-if="!showExam.length" style="text-align: center; margin-top: 25%; font-size: 20px;">{{ $t("studentWeb.exam.testpop.noExam") }}</div>
|
|
|
+ <div :class="['questionContent', {'qamode-box': instantPaper}]" ref="questionBox" v-else>
|
|
|
+ <!-- <span class="hintwrap">
|
|
|
+ <Tooltip :content="$t('studentWeb.exam.report.noSource')" theme="light" placement="left">
|
|
|
+ <span class="hintIcon">
|
|
|
+ <svg-icon icon-class="hint" />
|
|
|
+ </span>
|
|
|
+ </Tooltip>
|
|
|
+ </span> -->
|
|
|
+ <div class="questioDes">
|
|
|
+ <div class="questionType" v-if="getQue(queNo).parent === undefined">
|
|
|
+ <span>{{getTestType(getQue(queNo).type)}}</span>
|
|
|
+ <span v-if="getQue(queNo).type === 'subjective' && showExam[queNo].answerType">-{{ $t(`evaluation.newExercise.answerType.${showExam[queNo].answerType}`) }}</span>
|
|
|
+ </div>
|
|
|
+ <div class="que-item" v-if="getQue(queNo).type != 'compose' && getQue(queNo).parent === undefined">
|
|
|
+ <span v-if="isWrong" @click="changeStar(!getQue(queNo).star, queNo)" style="margin-right: 10px; cursor: pointer;">
|
|
|
+ <Icon custom="iconfont icon-shoucang1" size="25" v-show="!getQue(queNo).star" />
|
|
|
+ <Icon custom="iconfont icon-shoucang2" size="25" color="#FF7A4E" v-show="getQue(queNo).star" />
|
|
|
+ </span>
|
|
|
+ <span>{{ queNo + 1 }}.</span>
|
|
|
+ <!--题目渲染-->
|
|
|
+ <div id="answer-box" v-html="getQue(queNo).question"></div>
|
|
|
+ </div>
|
|
|
+ <!--综合题-->
|
|
|
+ <div v-if="getQue(queNo).type === 'compose' || getQue(queNo).parent !== undefined">
|
|
|
+ <div class="compose-content" v-if="getQue(queNo).parent !== undefined">
|
|
|
+ <div class="questionType">
|
|
|
+ <span>{{getTestType(getQue(queNo).parentInfo.type)}}</span>
|
|
|
+ <span v-if="getQue(queNo).type === 'subjective' && showExam[queNo].answerType">({{ $t(`evaluation.newExercise.answerType.${showExam[queNo].answerType}`) }})</span>
|
|
|
+ </div>
|
|
|
+ <div class="compose-box">
|
|
|
+ <span v-if="isWrong" @click="changeStar(!getQue(queNo).star, queNo, true)" style="cursor: pointer;">
|
|
|
+ <Icon custom="iconfont icon-shoucang1" size="25" v-show="!getQue(queNo).star" />
|
|
|
+ <Icon custom="iconfont icon-shoucang2" size="25" color="#FF7A4E" v-show="getQue(queNo).star" />
|
|
|
</span>
|
|
|
+ <span style="margin-left:10px;font-weight:800;font-size:15px">{{$t("studentWeb.exam.testpop.queNo")}}</span>
|
|
|
+ <br />
|
|
|
+ <div class="compose-item">
|
|
|
+ <!--<span w>{{ getQue(queNo).parent + 1}}.</span>-->
|
|
|
+ <!--题干渲染-->
|
|
|
+ <div v-html="getQue(queNo).parentInfo.question"></div>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
- <div v-else class="item-explain-details">
|
|
|
- {{ $t("studentWeb.exam.report.noKnowledge") }}
|
|
|
+ <div class="que-content">
|
|
|
+ <span style="width:51px">{{ getQue(queNo).paperIndex}}:</span>
|
|
|
+ <!--题目渲染-->
|
|
|
+ <div class="que-items" id="answer-box" v-html="getQue(queNo).question"></div>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <!-- 认知层次 -->
|
|
|
- <div class="item-explain">
|
|
|
- <span class="explain-title">【{{ $t("studentWeb.exam.report.filed") }}】</span>
|
|
|
- <div class="item-explain-details">
|
|
|
- <div>{{ levelList[showExam[queNo].field - 1] }}</div>
|
|
|
- </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="answers">
|
|
|
+ <div class="questionNo">{{$t("studentWeb.exam.testpop.myAns")}}</div>
|
|
|
+ <div class="answers-box">
|
|
|
+ <!--判断题选项-->
|
|
|
+ <div v-if="getQue(queNo).type == 'judge'" align="center">
|
|
|
+ <!-- <div class="testButn">
|
|
|
+ <Radio-group v-model="checkers[queNo][0]">
|
|
|
+ <Radio label="A"><Icon type="md-checkmark" /></Radio>
|
|
|
+ <Radio label="B"><Icon type="md-close" /></Radio>
|
|
|
+ </Radio-group>
|
|
|
+ </div> -->
|
|
|
+ <label class="testBtn yesNoBtn">
|
|
|
+ <input type="radio" value="A" v-model="checkers[queNo][0]" :disabled="!closeTest" />
|
|
|
+ <div class="testbg" :style="{'background-color': isWrong && showEnd && checkers[queNo][0] === 'A' ? (getQue(queNo).answer[0] === 'A' ? '' : 'red !important') : ''}">
|
|
|
+ <!-- <Icon type="ios-radio-button-off" /> -->
|
|
|
+ <Icon type="md-checkmark" />
|
|
|
+ </div>
|
|
|
+ </label>
|
|
|
+ <label class="testBtn yesNoBtn">
|
|
|
+ <input type="radio" value="B" v-model="checkers[queNo][0]" :disabled="!closeTest" />
|
|
|
+ <div class="testbg" :style="{'background-color': isWrong && showEnd && checkers[queNo][0] === 'B' ? (getQue(queNo).answer[0] === 'B' ? '' : 'red !important') : ''}">
|
|
|
+ <Icon type="md-close" />
|
|
|
+ </div>
|
|
|
+ </label>
|
|
|
</div>
|
|
|
- <div class="item-explain">
|
|
|
- <span class="explain-title">【{{ $t("studentWeb.exam.report.repairSource") }}】</span>
|
|
|
- <div class="item-explain-details-repair">
|
|
|
- <div v-if="showExam[queNo].repair.length != 0">
|
|
|
- <div v-for="(repairSource, normalIndex) in showExam[queNo].repair" :key="normalIndex" class="repair-link-wrap-item-box">
|
|
|
- <div class="file-icon">
|
|
|
- <img :src="$tools.getFileThum(repairSource.type, repairSource.name)"/>
|
|
|
- </div>
|
|
|
- <div class="file-info">
|
|
|
- <p class="file-name">{{ repairSource.name }}</p>
|
|
|
- <div>
|
|
|
- <span @click.stop="onPreview(repairSource)" v-if="repairSource.type !== 'other'">{{ $t('ability.review.preview')}}</span>
|
|
|
- <span @click.stop="onDownload(repairSource)" v-if="repairSource.type !== 'link'">{{ $t('ability.review.download')}}</span>
|
|
|
- </div>
|
|
|
+ <!--选择题选项-->
|
|
|
+ <div class="select-box" v-else-if="getQue(queNo).type === 'single' || getQue(queNo).type === 'multiple'">
|
|
|
+ <label class="testBtn"
|
|
|
+ v-for="(item, index) in getQue(queNo).option"
|
|
|
+ :key="index">
|
|
|
+ <span v-show="showEnd">
|
|
|
+ <Icon type="md-checkmark-circle" color="#24B880" size="20"
|
|
|
+ v-if="getQue(queNo).answer.includes(item.code)"
|
|
|
+ />
|
|
|
+ <Icon type="md-close-circle" color="red" size="20"
|
|
|
+ v-if="checkers[queNo].includes(item.code) && !getQue(queNo).answer.includes(item.code)"
|
|
|
+ />
|
|
|
+ </span>
|
|
|
+ <input type="checkbox"
|
|
|
+ :value="getQue(queNo).option[index].code"
|
|
|
+ v-model="checkers[queNo]"
|
|
|
+ @click="getAns(queNo,index)"
|
|
|
+ :disabled="!closeTest" />
|
|
|
+ <div class="testbg">
|
|
|
+ <div style="display:flex">
|
|
|
+ <span>{{ getQue(queNo).option[index].code }}. </span>
|
|
|
+ <div v-html="item.value" @click.stop.native.prevent="showImg($event)"></div>
|
|
|
+ </div>
|
|
|
+ <div style="clear:both"></div>
|
|
|
+ </div>
|
|
|
+ </label>
|
|
|
+ </div>
|
|
|
+ <!--问答题-->
|
|
|
+ <div class="compose-content" v-else-if="getQue(queNo).type === 'subjective'">
|
|
|
+ <!-- showExam[queNo].answerType: text(文本) Image(图片) file(文件) audio(音频 useAutoScore(自动评分) answerLang(语言)) -->
|
|
|
+ <!-- <template v-if="showExam[queNo].answerType === 'text' || showExam[queNo].answerType === 'text_Image'"> -->
|
|
|
+ <Input v-if="showExam[queNo].answerType === 'text'" v-model="checkers[queNo][0]" type="textarea" :rows="5" :autosize="{minRows: 5,maxRows: 10}" :placeholder="$t('studentWeb.exam.inputAnswers')"></Input>
|
|
|
+ <Compose v-else-if="showExam[queNo].answerType === 'text_Image'" ref="compose" :itemInfo="getQue(queNo)" :close="!closeTest" :textData="checkers[queNo]" :index="queNo" @dataGet="getComposeAns"></Compose>
|
|
|
+ <!-- </template> -->
|
|
|
+ <template v-else-if="showExam[queNo].answerType === 'audio'">
|
|
|
+ <AudioRecorder :textData="checkers[queNo]" :index="queNo" @dataGet="getComposeAns" />
|
|
|
+ </template>
|
|
|
+ <template v-else-if="showExam[queNo].answerType === 'file' || showExam[queNo].answerType === 'image'">
|
|
|
+ <Upload type="drag" :accept="subjectiveAccept(showExam[queNo])" action="" :before-upload="file => customUpload(file, queNo)">
|
|
|
+ <div style="padding: 20px 0" ref="upload1">
|
|
|
+ <Icon type="ios-cloud-upload" size="52" :style="{color: checkers[queNo].length ? '#b4b4b4' : '#2d8cf0' }"></Icon>
|
|
|
+ <p>
|
|
|
+ <span>
|
|
|
+ {{ checkers[queNo].length ? $t('jyzx.offline.againLoad') : $t('studentWeb.art.relatedFile')}}
|
|
|
+ </span>
|
|
|
+ </p>
|
|
|
+ </div>
|
|
|
+ </Upload>
|
|
|
+ <div class="repair-link-wrap-item-box" v-if="checkers[queNo].length">
|
|
|
+ <div class="file-icon">
|
|
|
+ <img :src="$tools.getFileThum(getFileType(checkers[queNo][0]), getFileName(checkers[queNo][0]))"/>
|
|
|
+ </div>
|
|
|
+ <div class="file-info">
|
|
|
+ <p class="file-name">{{ getFileName(checkers[queNo][0]) }}</p>
|
|
|
+ <div>
|
|
|
+ <span @click="onPreview(checkers[queNo][0], true)">{{ $t('ability.review.preview')}}</span>
|
|
|
+ <span @click="onDownload(checkers[queNo][0], true)">{{ $t('ability.review.download')}}</span>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <div v-else-if="!showExam[queNo].repair.length">
|
|
|
- {{ $t('studentWeb.exam.report.noSource') }}
|
|
|
+ </template>
|
|
|
+ <div class="compose-content" v-else>
|
|
|
+ <Compose ref="compose" :itemInfo="getQue(queNo)" :close="!closeTest" :textData="checkers[queNo]" :index="queNo" @dataGet="getComposeAns"></Compose>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="compose-content" v-else>
|
|
|
+ <Compose ref="compose" :itemInfo="getQue(queNo)" :close="!closeTest" :textData="checkers[queNo]" :index="queNo" @dataGet="getComposeAns"></Compose>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <!-- <div :style="isCheckAns ? 'height: 250px' : ''"></div> -->
|
|
|
+ <!-- 答案解析 -->
|
|
|
+ <div v-if="isWrong" :class="['analysis', showEnd ? 'active' : '']" @click="changeAnalysisType(true)">
|
|
|
+ <div class="item-explain">
|
|
|
+ <span class="explain-title">【{{ $t("studentWeb.exam.report.ansRes") }}】</span>
|
|
|
+ <div class="item-explain-details">
|
|
|
+ <span v-if="!checkers[queNo].length">{{ $t('studentWeb.exam.report.noAns') }}</span>
|
|
|
+ <span v-else v-for="(item, index) in checkers[queNo]" :key="index" v-html="item"></span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="item-explain">
|
|
|
+ <span class="explain-title">【{{ $t("studentWeb.exam.report.testAns") }}】</span>
|
|
|
+ <div class="item-explain-details">
|
|
|
+ <span v-if="!showExam[queNo].answer.length">{{ $t('studentWeb.exam.report.noAns') }}</span>
|
|
|
+ <span v-else v-for="(item, index) in showExam[queNo].answer" :key="index" v-html="item"></span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="item-explain">
|
|
|
+ <span class="explain-title">【{{ $t("studentWeb.exam.report.testAnalyse") }}】</span>
|
|
|
+ <div class="item-explain-details">
|
|
|
+ <div v-html="showExam[queNo].explain ? showExam[queNo].explain : $t('studentWeb.exam.report.noAnalyse')"></div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <!-- 知识点 -->
|
|
|
+ <div class="item-explain">
|
|
|
+ <span class="explain-title">【{{ $t("studentWeb.exam.report.knowledge") }}】</span>
|
|
|
+ <div v-if="showExam[queNo].knowledge && showExam[queNo].knowledge.length" class="item-explain-details">
|
|
|
+ <span v-for="(knowledge, index) in showExam[queNo].knowledge" :key="index" class="knowledge-style">
|
|
|
+ {{ knowledge }}
|
|
|
+ </span>
|
|
|
+ </div>
|
|
|
+ <div v-else class="item-explain-details">
|
|
|
+ {{ $t("studentWeb.exam.report.noKnowledge") }}
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <!-- 认知层次 -->
|
|
|
+ <div class="item-explain">
|
|
|
+ <span class="explain-title">【{{ $t("studentWeb.exam.report.filed") }}】</span>
|
|
|
+ <div class="item-explain-details">
|
|
|
+ <div>{{ levelList[showExam[queNo].field - 1] }}</div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="item-explain">
|
|
|
+ <span class="explain-title">【{{ $t("studentWeb.exam.report.repairSource") }}】</span>
|
|
|
+ <div class="item-explain-details-repair">
|
|
|
+ <div v-if="showExam[queNo].repair.length != 0">
|
|
|
+ <div v-for="(repairSource, normalIndex) in showExam[queNo].repair" :key="normalIndex" class="repair-link-wrap-item-box">
|
|
|
+ <div class="file-icon">
|
|
|
+ <img :src="$tools.getFileThum(repairSource.type, repairSource.name)"/>
|
|
|
+ </div>
|
|
|
+ <div class="file-info">
|
|
|
+ <p class="file-name">{{ repairSource.name }}</p>
|
|
|
+ <div>
|
|
|
+ <span @click.stop="onPreview(repairSource)" v-if="repairSource.type !== 'other'">{{ $t('ability.review.preview')}}</span>
|
|
|
+ <span @click.stop="onDownload(repairSource)" v-if="repairSource.type !== 'link'">{{ $t('ability.review.download')}}</span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</div>
|
|
|
+ <div v-else-if="!showExam[queNo].repair.length">
|
|
|
+ {{ $t('studentWeb.exam.report.noSource') }}
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <div v-else style="text-align: center; margin-top: 25%; font-size: 20px;">{{ $t("studentWeb.exam.testpop.noExam") }}</div>
|
|
|
- </template>
|
|
|
- </i-col>
|
|
|
- <!--答题卡-->
|
|
|
- <i-col class="ansArea" v-show="widthLimit || (!widthLimit && isShow)" v-if="!instantPaper"
|
|
|
- :xs="24"
|
|
|
- :sm="12"
|
|
|
- :md="6"
|
|
|
- :lg="4">
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <!-- 答题卡 -->
|
|
|
+ <div v-if="!instantPaper" class="answer-sheet">
|
|
|
<div class="countDown" v-if="needCountDown">
|
|
|
<div>{{$t("studentWeb.exam.examTime")}} </div>
|
|
|
<span>{{ surplus }}</span>
|
|
|
</div>
|
|
|
<div v-if="widthLimit">
|
|
|
- <div style="margin-top: 30px; font-weight: 800">{{$t("studentWeb.exam.testpop.myAnswerSheet")}}</div>
|
|
|
+ <div style="margin-top: 30px; display: flex; justify-content: space-between; align-items: center;">
|
|
|
+ <span style="font-weight: 800;">{{ $t("studentWeb.exam.testpop.myAnswerSheet") }}</span>
|
|
|
+ <div style="font-size: 14px; margin-right: 10px;">
|
|
|
+ <i-switch v-model="entireExam" size="small" />
|
|
|
+ <span>{{ entireExam ? '整卷作答' : '单题作答' }}</span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
<!--切換頁-->
|
|
|
- <div class="pageCtl2">
|
|
|
+ <div class="pageCtl2" v-show="!entireExam">
|
|
|
<button @click="preQ()" :disabled="!queNo" :class="{disable: !queNo}">
|
|
|
<Icon type="ios-arrow-back" />{{$t("studentWeb.exam.testpop.previous")}}
|
|
|
</button>
|
|
@@ -644,9 +643,9 @@
|
|
|
<div v-show="getItemTitle.type === 'Art'" style="width: 100%; margin-top: 10px;">
|
|
|
<Button v-if="closeTest && !isWrong" long class="artsubmitBtn" :class="{ hintClick: hintHandon() }" @click="openWarmMessage(2)">{{ $t("studentWeb.exam.testpop.submitted")}}</Button>
|
|
|
</div>
|
|
|
- </i-col>
|
|
|
- </Row>
|
|
|
- <div class="top-icon" @click="gotoTop" v-if="instantPaper">
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="top-icon" @click="gotoTop" v-if="instantPaper || entireExam">
|
|
|
<Icon type="ios-arrow-up" size="30" color="#249e35" />
|
|
|
</div>
|
|
|
<!-- 补救资源 -->
|
|
@@ -846,7 +845,8 @@
|
|
|
noExam: false,
|
|
|
maxSize: 15*1024*1024, //文件最大
|
|
|
sasUpload: undefined,
|
|
|
- fileTypes: ['JPG', 'JPEG', 'BMP', 'TIF', 'PNG', 'GIF', 'SVG', 'MP4', 'DVD', 'MPEG2', 'MPEG4', 'PPT', 'PPTX', 'TXT', 'DOC', 'DOCX', 'PDF', 'XLS', 'XLSX', 'MP3', 'OGG', 'WAV']
|
|
|
+ fileTypes: ['JPG', 'JPEG', 'BMP', 'TIF', 'PNG', 'GIF', 'SVG', 'MP4', 'DVD', 'MPEG2', 'MPEG4', 'PPT', 'PPTX', 'TXT', 'DOC', 'DOCX', 'PDF', 'XLS', 'XLSX', 'MP3', 'OGG', 'WAV'],
|
|
|
+ entireExam: false,
|
|
|
};
|
|
|
},
|
|
|
methods: {
|
|
@@ -1119,11 +1119,15 @@
|
|
|
// 点击答题卡跳转
|
|
|
gototheQues(index) {
|
|
|
this.queNo = index - 1
|
|
|
- // 页面宽度<576,才会调用
|
|
|
- if(!this.widthLimit) {
|
|
|
- this.showPage(false)
|
|
|
+ if(this.entireExam) {
|
|
|
+ document.getElementsByClassName("questionContent")[index - 1].scrollIntoView()
|
|
|
+ } else {
|
|
|
+ // 页面宽度<576,才会调用
|
|
|
+ if(!this.widthLimit) {
|
|
|
+ this.showPage(false)
|
|
|
+ }
|
|
|
+ // this.changeAnalysisType(false)
|
|
|
}
|
|
|
- // this.changeAnalysisType(false)
|
|
|
},
|
|
|
preQ() {
|
|
|
if (this.queNo > 0) {
|
|
@@ -1529,7 +1533,9 @@
|
|
|
return type
|
|
|
},
|
|
|
gotoTop() {
|
|
|
- document.getElementsByClassName("img-wrap")[0].scrollIntoView()
|
|
|
+ if(this.instantPaper) {
|
|
|
+ document.getElementsByClassName("img-wrap")[0].scrollIntoView()
|
|
|
+ }
|
|
|
document.getElementsByClassName("instant-exam-box")[0].scrollIntoView()
|
|
|
},
|
|
|
|