|
|
@ -129,16 +129,18 @@ |
|
|
|
<el-tag class="m-r-5" :type="ques.difficultTheme">{{ ques.difficult }}</el-tag> |
|
|
|
<el-tag class="m-r-5" :type="ques.difficultTheme">{{ ques.difficult }}</el-tag> |
|
|
|
|
|
|
|
|
|
|
|
<div class="stem html-parse" :id="'stem' + ques.id" v-html="ques.stem"></div> |
|
|
|
<div class="stem html-parse" :id="'stem' + ques.id" v-html="ques.stem"></div> |
|
|
|
<p>({{ ques.questionScore }}分)</p> |
|
|
|
<p v-if="!ques.notScored">({{ ques.questionScore }}分)</p> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
|
|
<div |
|
|
|
<div |
|
|
|
v-if="item.questionType !== 'fill_blank' && item.questionType !== 'essay' && ques.questionAnswerVersionsList" |
|
|
|
v-if="item.questionType !== 'fill_blank' && item.questionType !== 'essay' && ques.questionAnswerVersionsList" |
|
|
|
class="m-b-10"> |
|
|
|
class="m-b-10"> |
|
|
|
<div v-for="(opt, j) in ques.questionAnswerVersionsList" :key="j" class="opt"> |
|
|
|
<div v-for="(opt, j) in ques.questionAnswerVersionsList" :key="j" class="opt"> |
|
|
|
<img v-if="opt.optCorrect === 1" src="@/assets/img/right.svg" alt="" class="icon"> |
|
|
|
<template v-if="!ques.notScored"> |
|
|
|
<img v-else-if="!opt.optCorrect" src="@/assets/img/wrong.svg" alt="" class="icon"> |
|
|
|
<img v-if="opt.optCorrect === 1" src="@/assets/img/right.svg" alt="" class="icon"> |
|
|
|
<span v-else class="icon not-ans"></span> |
|
|
|
<img v-else-if="!opt.optCorrect" src="@/assets/img/wrong.svg" alt="" class="icon"> |
|
|
|
|
|
|
|
<span v-else class="icon not-ans"></span> |
|
|
|
|
|
|
|
</template> |
|
|
|
|
|
|
|
|
|
|
|
<span>{{ numToLetter(j) }}. </span> |
|
|
|
<span>{{ numToLetter(j) }}. </span> |
|
|
|
<div class="text html-parse" v-html="opt.optionText"></div> |
|
|
|
<div class="text html-parse" v-html="opt.optionText"></div> |
|
|
@ -170,25 +172,34 @@ |
|
|
|
<div v-else>暂无解析</div> |
|
|
|
<div v-else>暂无解析</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
|
|
<div :class="['ques-info', { essay: item.questionType === 'essay' && ques.scoringStatus === '未判分' }]"> |
|
|
|
<div |
|
|
|
|
|
|
|
:class="['ques-info', { essay: item.questionType === 'essay' && ques.scoringStatus === '未判分' && !ques.notScored }]"> |
|
|
|
|
|
|
|
<!-- 主观题 --> |
|
|
|
<template v-if="item.questionType === 'essay'"> |
|
|
|
<template v-if="item.questionType === 'essay'"> |
|
|
|
<div class="line"> |
|
|
|
<div class="line"> |
|
|
|
<span class="line-label">参考答案:</span> |
|
|
|
<span class="line-label">参考答案:</span> |
|
|
|
<div v-html="ques.questionAnswerVersionsList[0].referenceAnswer" class="html-parse"></div> |
|
|
|
<div v-if="ques.questionAnswerVersionsList[0].referenceAnswer" |
|
|
|
|
|
|
|
v-html="ques.questionAnswerVersionsList[0].referenceAnswer" class="html-parse"></div> |
|
|
|
|
|
|
|
<span v-else>暂无参考答案</span> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
<div class="line"> |
|
|
|
<div class="line"> |
|
|
|
<span class="line-label">考生答案:</span> |
|
|
|
<span class="line-label">考生答案:</span> |
|
|
|
<div v-if="ques.answerContent" v-html="ques.answerContent" class="html-parse"></div> |
|
|
|
<p v-if="!ques.richTextStatus">无需作答</p> |
|
|
|
<div v-else>未作答</div> |
|
|
|
<div v-else-if="ques.answerContent" v-html="ques.answerContent" class="html-parse"></div> |
|
|
|
|
|
|
|
<p v-else>未作答</p> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
<div v-if="ques.attachmentUrl" class="line"> |
|
|
|
<div v-if="ques.allowAttachment" class="line"> |
|
|
|
<span class="line-label">考生上传附件:</span> |
|
|
|
<span class="line-label">考生上传附件:</span> |
|
|
|
<el-link class="m-r-10" type="primary" @click="preview(ques.attachmentUrl)">{{ |
|
|
|
<template v-if="ques.attachmentUrl"> |
|
|
|
ques.attachmentName }}</el-link> |
|
|
|
<el-link class="m-r-10" type="primary" @click="preview(ques.attachmentUrl)">{{ |
|
|
|
<el-button type="primary" size="mini" round |
|
|
|
ques.attachmentName }}</el-link> |
|
|
|
@click="download(ques.attachmentName, ques.attachmentUrl)">下载</el-button> |
|
|
|
<el-button type="primary" size="mini" round |
|
|
|
|
|
|
|
@click="download(ques.attachmentName, ques.attachmentUrl)">下载</el-button> |
|
|
|
|
|
|
|
</template> |
|
|
|
|
|
|
|
<span v-else>未上传</span> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</template> |
|
|
|
</template> |
|
|
|
|
|
|
|
<!-- 客观题 --> |
|
|
|
<template v-else> |
|
|
|
<template v-else> |
|
|
|
<div class="line">正确答案:{{ ques.quesAnswer }}</div> |
|
|
|
<div class="line">正确答案:{{ ques.quesAnswer }}</div> |
|
|
|
<div class="line"> |
|
|
|
<div class="line"> |
|
|
@ -197,16 +208,21 @@ |
|
|
|
<div v-else-if="ques.userAnswerFill" class="fill-answers"> |
|
|
|
<div v-else-if="ques.userAnswerFill" class="fill-answers"> |
|
|
|
<p v-for="(ans, j) in ques.userAnswerFill" :key="j" class="fill-answer"> |
|
|
|
<p v-for="(ans, j) in ques.userAnswerFill" :key="j" class="fill-answer"> |
|
|
|
填空{{ j + 1 }}:{{ ans.studentAnswer || '未作答' }} |
|
|
|
填空{{ j + 1 }}:{{ ans.studentAnswer || '未作答' }} |
|
|
|
<img v-if="ans.correct" src="@/assets/img/right.svg" alt="" class="icon"> |
|
|
|
<template v-if="!ques.notScored"> |
|
|
|
<img v-else src="@/assets/img/wrong.svg" alt="" class="icon">; |
|
|
|
<img v-if="ans.correct" src="@/assets/img/right.svg" alt="" class="icon"> |
|
|
|
|
|
|
|
<img v-else src="@/assets/img/wrong.svg" alt="" class="icon"> |
|
|
|
|
|
|
|
</template>; |
|
|
|
</p> |
|
|
|
</p> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
<span v-else>未作答</span> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</template> |
|
|
|
</template> |
|
|
|
|
|
|
|
|
|
|
|
<div class="line">题目分值:{{ ques.questionScore }}分</div> |
|
|
|
<div class="line">题目分值:{{ ques.notScored ? '不计分' : ques.questionScore + '分' }}</div> |
|
|
|
<div class="line">考生得分:<el-input class="score-input" size="small" :value="ques.userScore" |
|
|
|
<div class="line">考生得分:<template v-if="ques.notScored">不计分</template> |
|
|
|
disabled />分 |
|
|
|
<template v-else> |
|
|
|
|
|
|
|
<el-input class="score-input" size="small" :value="ques.userScore" disabled />分 |
|
|
|
|
|
|
|
</template> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
|
|
<div v-for="(coment, k) in ques.comment" :key="k" class="line"> |
|
|
|
<div v-for="(coment, k) in ques.comment" :key="k" class="line"> |
|
|
@ -287,6 +303,10 @@ export default { |
|
|
|
id: 4, |
|
|
|
id: 4, |
|
|
|
name: '待判分' |
|
|
|
name: '待判分' |
|
|
|
}, |
|
|
|
}, |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
id: 5, |
|
|
|
|
|
|
|
name: '不计分' |
|
|
|
|
|
|
|
}, |
|
|
|
], |
|
|
|
], |
|
|
|
outlines: [], |
|
|
|
outlines: [], |
|
|
|
paper: [], |
|
|
|
paper: [], |
|
|
@ -331,6 +351,8 @@ export default { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
n.notScored = n.questionScore === 0 // 不计分(题目分值=0,则为不计分) |
|
|
|
|
|
|
|
if (n.notScored) n.userScore = '-' |
|
|
|
const opts = n.questionAnswerVersionsList |
|
|
|
const opts = n.questionAnswerVersionsList |
|
|
|
if (type !== 'fill_blank' && type !== 'essay') { // 选择题 |
|
|
|
if (type !== 'fill_blank' && type !== 'essay') { // 选择题 |
|
|
|
if (!n.userScore) n.userScore = 0 |
|
|
|
if (!n.userScore) n.userScore = 0 |
|
|
@ -379,7 +401,7 @@ export default { |
|
|
|
// 填空题需要区分部分正确还是正确、错误 |
|
|
|
// 填空题需要区分部分正确还是正确、错误 |
|
|
|
let rightLen = 0 |
|
|
|
let rightLen = 0 |
|
|
|
if (n.userAnswerFill) rightLen = n.userAnswerFill.filter(m => m.correct).length // 正确的空的数量 |
|
|
|
if (n.userAnswerFill) rightLen = n.userAnswerFill.filter(m => m.correct).length // 正确的空的数量 |
|
|
|
n.isCorrect = n.userScore && n.questionScore === n.userScore ? 1 : (rightLen ? 3 : 2) |
|
|
|
n.isCorrect = n.notScored ? 5 : (n.userScore && n.questionScore === n.userScore ? 1 : (rightLen ? 3 : 2)) |
|
|
|
} else if (type === 'essay') { // 简答题 |
|
|
|
} else if (type === 'essay') { // 简答题 |
|
|
|
this.handleIsCorrect(n) |
|
|
|
this.handleIsCorrect(n) |
|
|
|
} |
|
|
|
} |
|
|
@ -417,7 +439,7 @@ export default { |
|
|
|
}, |
|
|
|
}, |
|
|
|
// 判断试题的对错 |
|
|
|
// 判断试题的对错 |
|
|
|
handleIsCorrect (n) { |
|
|
|
handleIsCorrect (n) { |
|
|
|
n.isCorrect = n.userScore === undefined ? 4 : (n.userScore === n.questionScore ? 1 : n.userScore ? 3 : 2) // 简答题没有reviewScore则显示待判分, 有则判断是否跟题目分数相同,完全相同是正确,小于则部分正确,0则错误 |
|
|
|
n.isCorrect = n.notScored ? 5 : (n.userScore === undefined ? 4 : (n.userScore === n.questionScore ? 1 : n.userScore ? 3 : 2)) // 简答题没有reviewScore则显示待判分, 有则判断是否跟题目分数相同,完全相同是正确,小于则部分正确,0则错误 |
|
|
|
}, |
|
|
|
}, |
|
|
|
scrollToSmooth (position, duration) { |
|
|
|
scrollToSmooth (position, duration) { |
|
|
|
let startTime = Date.now() |
|
|
|
let startTime = Date.now() |
|
|
@ -633,7 +655,7 @@ samp { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
.left { |
|
|
|
.left { |
|
|
|
width: 290px; |
|
|
|
width: 320px; |
|
|
|
margin-right: 15px; |
|
|
|
margin-right: 15px; |
|
|
|
background-color: #fff; |
|
|
|
background-color: #fff; |
|
|
|
|
|
|
|
|
|
|
@ -713,6 +735,12 @@ samp { |
|
|
|
border-color: #fe9f0a; |
|
|
|
border-color: #fe9f0a; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.status5 .serial { |
|
|
|
|
|
|
|
color: #fff; |
|
|
|
|
|
|
|
background-color: #d1d1d1; |
|
|
|
|
|
|
|
border-color: #d1d1d1; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
.score { |
|
|
|
.score { |
|
|
|
height: 22px; |
|
|
|
height: 22px; |
|
|
|
padding: 0 2px; |
|
|
|
padding: 0 2px; |
|
|
@ -725,7 +753,7 @@ samp { |
|
|
|
.status-filter { |
|
|
|
.status-filter { |
|
|
|
display: flex; |
|
|
|
display: flex; |
|
|
|
justify-content: space-between; |
|
|
|
justify-content: space-between; |
|
|
|
padding: 10px; |
|
|
|
padding: 10px 0; |
|
|
|
border-top: 1px solid #e5e5e5; |
|
|
|
border-top: 1px solid #e5e5e5; |
|
|
|
|
|
|
|
|
|
|
|
li { |
|
|
|
li { |
|
|
@ -735,6 +763,7 @@ samp { |
|
|
|
font-size: 12px; |
|
|
|
font-size: 12px; |
|
|
|
color: #333; |
|
|
|
color: #333; |
|
|
|
cursor: pointer; |
|
|
|
cursor: pointer; |
|
|
|
|
|
|
|
white-space: nowrap; |
|
|
|
border: 1px solid transparent; |
|
|
|
border: 1px solid transparent; |
|
|
|
|
|
|
|
|
|
|
|
&:before { |
|
|
|
&:before { |
|
|
@ -778,7 +807,7 @@ samp { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
&:last-child { |
|
|
|
&:nth-child(4) { |
|
|
|
&.active { |
|
|
|
&.active { |
|
|
|
color: #fe9f0a; |
|
|
|
color: #fe9f0a; |
|
|
|
border-color: #fe9f0a; |
|
|
|
border-color: #fe9f0a; |
|
|
@ -789,6 +818,17 @@ samp { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
&:last-child { |
|
|
|
|
|
|
|
&.active { |
|
|
|
|
|
|
|
color: #d1d1d1; |
|
|
|
|
|
|
|
border-color: #d1d1d1; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
&:before { |
|
|
|
|
|
|
|
background-color: #d1d1d1; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
&.active { |
|
|
|
&.active { |
|
|
|
font-weight: 600; |
|
|
|
font-weight: 600; |
|
|
|
} |
|
|
|
} |
|
|
@ -797,7 +837,7 @@ samp { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
.right { |
|
|
|
.right { |
|
|
|
width: calc(100% - 325px); |
|
|
|
width: calc(100% - 355px); |
|
|
|
height: calc(100vh - 287px); |
|
|
|
height: calc(100vh - 287px); |
|
|
|
padding: 10px; |
|
|
|
padding: 10px; |
|
|
|
background-color: #fff; |
|
|
|
background-color: #fff; |
|
|
|