浏览代码

#3437 C868 学生端--评测作答,增加“整卷作答”方式

XW 1 年之前
父节点
当前提交
a5f269602b

+ 47 - 21
TEAMModelOS/ClientApp/src/components/student-web/EventView/EventContentTypeTemplate/PaperViewBox/PaperTest.less

@@ -168,26 +168,6 @@
             display: none;
             text-align: center;
         }
-
-        .img-wrap {
-            width: 40%;
-            margin-left: 10px;
-            margin-top: 20px;
-
-            .left-img {
-                text-align: center;
-
-                &>img {
-                    max-width: 95%;
-                }
-            }
-
-            .page-footer {
-                text-align: center;
-                padding: 10px 0;
-            }
-        }
-
     }
 
     .repair-link-wrap-item-box {
@@ -252,6 +232,7 @@
         .qamode-box {
             width: 100%;
             // margin-bottom: 20px;
+            padding: 5px 50px;
         }
 
         .questionNo {
@@ -305,7 +286,7 @@
     }
 
     .questionContent {
-        padding: 5px 50px;
+        padding: 5px 50px 50px;
     }
 
     .qamode-box {
@@ -693,6 +674,51 @@
         margin-left: 7%;
         margin-bottom: 10%;
     }
+
+
+
+    .test-content {
+        display: flex;
+        justify-content: space-between;
+        height: calc(100% - 40px);
+
+        .attachment-box {
+            width: 60%;
+
+            .img-wrap {
+                /* width: 40%;
+                margin-left: 10px; */
+                margin-top: 20px;
+
+                .left-img {
+                    text-align: center;
+
+                    &>img {
+                        max-width: 95%;
+                        cursor: pointer;
+                    }
+                }
+
+                .page-footer {
+                    text-align: center;
+                    padding: 10px 0;
+                }
+            }
+        }
+
+        .question-content {
+            width: 79%;
+            background-color: #fff;
+            height: 100%;
+        }
+
+        .answer-sheet {
+            width: 20%;
+            padding-left: 10px;
+            background-color: #fafafa;
+            box-shadow: -5px 2px 13px rgba(0, 0, 0, 0.1);
+        }
+    }
 }
 
 .top-icon {

+ 378 - 372
TEAMModelOS/ClientApp/src/components/student-web/EventView/EventContentTypeTemplate/PaperViewBox/PaperTest.vue

@@ -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")}}&nbsp;</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()
             },