parent
3668825847
commit
89a1a63f71
12 changed files with 1141 additions and 286 deletions
After Width: | Height: | Size: 593 B |
After Width: | Height: | Size: 766 B |
After Width: | Height: | Size: 545 B |
After Width: | Height: | Size: 545 B |
After Width: | Height: | Size: 768 B |
@ -0,0 +1,50 @@ |
||||
export default { |
||||
difficults: [ |
||||
{ |
||||
id: 'basic', |
||||
name: '基础', |
||||
coefficient: 0.2, // 难度系数,试卷里计算试卷难度专用
|
||||
theme: 'success', |
||||
}, |
||||
{ |
||||
id: 'easy', |
||||
name: '普通', |
||||
coefficient: 0.4, |
||||
theme: '', |
||||
}, |
||||
{ |
||||
id: 'medium', |
||||
name: '较难', |
||||
coefficient: 0.6, |
||||
theme: 'warning', |
||||
}, |
||||
{ |
||||
id: 'hard', |
||||
name: '难', |
||||
coefficient: 0.8, |
||||
theme: 'danger', |
||||
}, |
||||
], |
||||
questionTypes: [ |
||||
{ |
||||
id: 'single_choice', |
||||
name: '单选题' |
||||
}, |
||||
{ |
||||
id: 'multiple_choice', |
||||
name: '多选题' |
||||
}, |
||||
{ |
||||
id: 'judgement', |
||||
name: '判断题' |
||||
}, |
||||
{ |
||||
id: 'fill_blank', |
||||
name: '填空题' |
||||
}, |
||||
{ |
||||
id: 'essay', |
||||
name: '问答题' |
||||
}, |
||||
], |
||||
} |
@ -0,0 +1,914 @@ |
||||
<template> |
||||
<div class="wrap"> |
||||
<el-card shadow="hover" class="m-b-20"> |
||||
<el-page-header @back="$router.back()" content="查看报告"></el-page-header> |
||||
</el-card> |
||||
|
||||
|
||||
<div class="report" v-loading="loading"> |
||||
<div class="left"> |
||||
<h6 class="title">答题卡</h6> |
||||
<div v-if="paper" class="type-wrap"> |
||||
<template v-for="(item, i) in paper"> |
||||
<div |
||||
v-if="item.userAnswerList.length && (!sheetStatus || item.userAnswerList.some(e => e.isCorrect === sheetStatus))" |
||||
:key="i" class="type"> |
||||
<h6 class="stem">{{ arabicToChinese(i + 1) }}、{{ item.outlineName }}(本题共{{ item.questionNum }}小题,共{{ |
||||
item.targetScore }}分)</h6> |
||||
<ul class="serials"> |
||||
<template v-for="(ques, j) in item.userAnswerList"> |
||||
<li v-if="!sheetStatus || sheetStatus === ques.isCorrect" :key="j" :class="'status' + ques.isCorrect"> |
||||
<p :class="['serial', { answered: ques.answered, partAnswer: ques.partAnswer }]">{{ j + 1 }}</p> |
||||
<p class="score">{{ ques.userScore }}</p> |
||||
</li> |
||||
</template> |
||||
</ul> |
||||
</div> |
||||
</template> |
||||
</div> |
||||
<ul class="status-filter"> |
||||
<li v-for="(item, i) in statusList" :key="i" :class="{ active: sheetStatus === item.id }" |
||||
@click="filterStatus(item.id)">{{ item.name }}</li> |
||||
</ul> |
||||
</div> |
||||
<div class="right"> |
||||
<div class="text-right"> |
||||
<el-button type="primary" @click="exportPage">导出报告</el-button> |
||||
</div> |
||||
<h6 class="r-title">标准实验报告</h6> |
||||
<div class="info"> |
||||
<h6 class="l-title"> |
||||
<img src="@/assets/img/info1.png" alt=""> |
||||
基本信息 |
||||
</h6> |
||||
<ul :class="['info-list', { edit: editing }]"> |
||||
<li> |
||||
<label>学生姓名:</label> |
||||
<el-input v-if="editing" v-model="info.userName" disabled></el-input> |
||||
<span v-else>{{ info.userName }}</span> |
||||
</li> |
||||
<li> |
||||
<label>学生学号:</label> |
||||
<el-input v-if="editing" v-model="info.workNumber" disabled></el-input> |
||||
<span v-else>{{ info.workNumber }}</span> |
||||
</li> |
||||
<li> |
||||
<label>学生班级:</label> |
||||
<el-input v-if="editing" v-model="info.className"></el-input> |
||||
<span v-else>{{ info.className }}</span> |
||||
</li> |
||||
<li> |
||||
<label>成绩:</label> |
||||
<el-input v-if="editing" v-model="info.score" disabled></el-input> |
||||
<div v-else class="score-wrap"> |
||||
<em>{{ info.score }}</em> |
||||
<img src="@/assets/img/point.png" alt=""> |
||||
<p v-if="essayExist" class="exist">(部分试题待判分,成绩待定)</p> |
||||
</div> |
||||
</li> |
||||
<li> |
||||
<label>提交时间:</label> |
||||
<el-input v-if="editing" v-model="info.submitTime" disabled></el-input> |
||||
<span v-else>{{ info.submitTime }}</span> |
||||
</li> |
||||
<li> |
||||
<label>用时:</label> |
||||
<el-input v-if="editing" v-model="info.timeSum"></el-input> |
||||
<span v-else>{{ info.timeSum }}</span> |
||||
</li> |
||||
<li> |
||||
<label>指导老师:</label> |
||||
<el-input v-if="editing" v-model="info.instructor"></el-input> |
||||
<span v-else>{{ info.instructor }}</span> |
||||
</li> |
||||
</ul> |
||||
<div class="m-b-20"> |
||||
<h6 class="l-title"> |
||||
<img src="@/assets/img/report4.png" alt=""> |
||||
得分情况 |
||||
</h6> |
||||
<el-table :data="paper" class="table" border stripe header-align="center"> |
||||
<el-table-column prop="outlineName" label="大题名称" align="center"></el-table-column> |
||||
<el-table-column prop="questionNum" label="小题总数" align="center"></el-table-column> |
||||
<el-table-column prop="targetScore" label="总分" align="center"></el-table-column> |
||||
<el-table-column prop="userTotalScore" label="得分" align="center"> |
||||
<template slot-scope="scope"> |
||||
<p v-if="scope.row.questionType === 'essay'" class="text-red">待评分</p> |
||||
<p v-else>{{ scope.row.userTotalScore }}</p> |
||||
</template> |
||||
</el-table-column> |
||||
<el-table-column prop="scoreRatePercentage" label="得分率" align="center"></el-table-column> |
||||
</el-table> |
||||
</div> |
||||
|
||||
<ul v-if="paper" class="ques-wrap"> |
||||
<li v-for="(item, i) in paper" :key="i"> |
||||
<div class="outline"> |
||||
{{ arabicToChinese(i + 1) }}、{{ item.questionTypeName }}(本题共{{ item.questionNum }}小题,共{{ |
||||
item.targetScore }}分) |
||||
<img :class="['shrink', { active: item.shrink }]" src="@/assets/img/shrink.svg" alt="" |
||||
@click="item.shrink = !item.shrink"> |
||||
</div> |
||||
<div :class="['ques', { hide: item.shrink }]"> |
||||
<div v-for="(ques, j) in item.userAnswerList" :key="j" class="item"> |
||||
<div class="stem-wrap"> |
||||
<div class="labels"> |
||||
<span class="label">{{ j + 1 }} / {{ item.questionNum }}</span> |
||||
<span class="label">{{ item.questionTypeName }}</span> |
||||
</div> |
||||
<el-tag class="m-r-5" :type="ques.difficultTheme">{{ ques.difficult }}</el-tag> |
||||
|
||||
<div class="stem" :id="'stem' + ques.id" v-html="getQuesStem(ques)"></div> |
||||
<p>({{ ques.questionScore }}分)</p> |
||||
</div> |
||||
|
||||
<div |
||||
v-if="item.questionType !== 'fill_blank' && item.questionType !== 'essay' && ques.questionAnswerVersionsList" |
||||
class="m-b-10"> |
||||
<div v-for="(opt, j) in ques.questionAnswerVersionsList" :key="j" class="opt"> |
||||
<el-checkbox v-if="item.questionType === 'multiple_choice'" v-model="opt.answerIsCorrect" |
||||
:true-label="1"></el-checkbox> |
||||
<el-radio v-else v-model="opt.answerIsCorrect" :true-label="1" :label="1" disabled></el-radio> |
||||
<span>{{ numToLetter(j) }}. </span> |
||||
<div class="text" v-html="opt.optionText"></div> |
||||
</div> |
||||
</div> |
||||
<template v-if="item.questionType === 'essay'"> |
||||
<div v-if="ques.stemAttachment" class="m-b-10"> |
||||
<el-link class="m-r-10" type="primary">{{ ques.stemAttachment }}</el-link> |
||||
<el-button type="primary" size="mini" round @click="download(ques.stemAttachment)">下载</el-button> |
||||
</div> |
||||
<div v-if="ques.uploadInstructions" class="line m-b-10"> |
||||
<span>考生上传附件说明:</span> |
||||
<div v-html="ques.uploadInstructions"></div> |
||||
</div> |
||||
</template> |
||||
|
||||
<div class="m-b-10"> |
||||
<span>【知识点】</span> |
||||
<el-tag v-for="(kp, k) in ques.kpList" :key="k" class="m-r-5">{{ kp }}</el-tag> |
||||
</div> |
||||
<div class="flex m-b-10"> |
||||
<span>【解析】</span> |
||||
<div |
||||
v-if="ques.questionAnswerVersionsList.length && ques.questionAnswerVersionsList[0].answerAnalysis" |
||||
v-html="ques.questionAnswerVersionsList[0].answerAnalysis"></div> |
||||
<div v-else>暂无解析</div> |
||||
</div> |
||||
|
||||
<div :class="['ques-info', { essay: item.questionType === 'essay' }]"> |
||||
<template v-if="item.questionType === 'essay'"> |
||||
<div class="line"> |
||||
<span>参考答案:</span> |
||||
<div v-html="ques.questionAnswerVersionsList[0].referenceAnswer"></div> |
||||
</div> |
||||
<div class="line"> |
||||
<span>考生答案:</span> |
||||
<div v-html="ques.answerContent"></div> |
||||
</div> |
||||
<div v-if="ques.attachmentUrl" class="line"> |
||||
<span>考生上传附件:</span> |
||||
<el-link class="m-r-10" type="primary">{{ ques.attachmentName }}</el-link> |
||||
<el-button type="primary" size="mini" round @click="download(ques)">下载</el-button> |
||||
</div> |
||||
</template> |
||||
<template v-else> |
||||
<div class="line">正确答案:{{ ques.quesAnswer }}</div> |
||||
<div class="line"> |
||||
<span>考生答案:</span> |
||||
<p v-if="item.questionType !== 'fill_blank'">{{ ques.userAnswerStr }}</p> |
||||
<div v-else-if="ques.userAnswerFill" class="fill-answers"> |
||||
<p v-for="(ans, j) in ques.userAnswerFill" :key="j" class="fill-answer"> |
||||
填空{{ j + 1 }}:{{ ans.studentAnswer }} |
||||
<img v-if="ans.correct" src="@/assets/img/right.svg" alt="" class="icon"> |
||||
<img v-else src="@/assets/img/wrong.svg" alt="" class="icon">; |
||||
</p> |
||||
</div> |
||||
</div> |
||||
</template> |
||||
|
||||
<div class="line">题目分值:{{ ques.questionScore }}分</div> |
||||
<div class="line">考生得分:<el-input class="score-input" size="small" :value="ques.userScore" |
||||
disabled />分 |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</li> |
||||
</ul> |
||||
|
||||
<div class="m-b-20"> |
||||
<h6 class="l-title"> |
||||
<img src="@/assets/img/report5.png" alt=""> |
||||
考试总结与体会 |
||||
</h6> |
||||
<quill v-if="editing" :border="true" v-model="form.summarize" :minHeight="150" :height="150" /> |
||||
<div v-else class="pre-wrap" v-html="form.summarize"></div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</template> |
||||
|
||||
<script> |
||||
import QuesConst from '@/const/ques' |
||||
import TestPaperConst from '@/const/testPaper' |
||||
import Util from '@/libs/util' |
||||
export default { |
||||
data () { |
||||
return { |
||||
numToLetter: Util.numToLetter, |
||||
arabicToChinese: Util.arabicToChinese, |
||||
reportId: this.$route.query.reportId, |
||||
title: "实验报告", |
||||
form: { |
||||
className: "", |
||||
instructor: "", |
||||
period: "", |
||||
projectName: "", |
||||
summarize: "", |
||||
}, |
||||
info: {}, |
||||
outline: [], |
||||
editing: false, |
||||
loadIns: null, |
||||
loading: false, |
||||
sheetStatus: '', |
||||
statusList: [ |
||||
{ |
||||
id: 1, |
||||
name: '正确' |
||||
}, |
||||
{ |
||||
id: 2, |
||||
name: '错误' |
||||
}, |
||||
{ |
||||
id: 3, |
||||
name: '部分正确' |
||||
}, |
||||
{ |
||||
id: 4, |
||||
name: '待判分' |
||||
}, |
||||
], |
||||
paper: [], |
||||
essayExist: 0, |
||||
}; |
||||
}, |
||||
mounted () { |
||||
this.getData() |
||||
}, |
||||
methods: { |
||||
async getData () { |
||||
this.loading = true |
||||
try { |
||||
const { userAnswers: paper, report } = await this.$get(`${this.api.getDetailedExamScores}?reportId=${this.reportId}`) |
||||
this.form = report |
||||
|
||||
// 处理试题信息 |
||||
const { questionTypes: types, difficults } = QuesConst |
||||
const { numToLetter } = Util |
||||
let essayExist = 0 |
||||
paper.map(e => { |
||||
if (e.questionType === 'essay') essayExist = 1 |
||||
e.shrink = false |
||||
const type = e.questionType |
||||
e.questionTypeName = types.find(n => n.id === type).name |
||||
e.userAnswerList && e.userAnswerList.map(n => { |
||||
if (n.difficulty) { |
||||
const curDiff = difficults.find(m => m.id === n.difficulty) |
||||
if (curDiff) { |
||||
n.difficult = curDiff.name |
||||
n.difficultTheme = curDiff.theme |
||||
} |
||||
} |
||||
n.kpList = n.knowledgePointName.split(',') |
||||
|
||||
const opts = n.questionAnswerVersionsList |
||||
if (type !== 'fill_blank' && type !== 'essay') { // 选择题 |
||||
n.isCorrect = n.userScore && n.userScore === n.questionScore ? 1 : 2 |
||||
const quesAnswer = [] |
||||
opts && opts.map((m, j) => { |
||||
m.answerIsCorrect && quesAnswer.push(numToLetter(j)) |
||||
}) |
||||
n.quesAnswer = quesAnswer.join('') |
||||
let { userAnswer } = n |
||||
if (userAnswer) { |
||||
userAnswer = JSON.parse(userAnswer) |
||||
n.userAnswerStr = userAnswer.map(m => numToLetter(+m - 1)).join('') |
||||
} |
||||
} else if (type === 'fill_blank') { // 填空题 |
||||
// 学生做的填空题答案及分数 |
||||
let { jsonText } = n |
||||
if (jsonText) { |
||||
n.userAnswerFill = JSON.parse(jsonText) |
||||
} |
||||
|
||||
// 正确答案 |
||||
if (opts && opts.length) { |
||||
let { answerData } = opts[0] |
||||
if (answerData) { |
||||
answerData = JSON.parse(answerData) |
||||
let quesAnswer = '' |
||||
answerData.map((m, j) => { |
||||
if (m.fills) { |
||||
quesAnswer += `填空${j + 1}:${m.fills.map(n => n.val).join(' ||| ')};` |
||||
} |
||||
}) |
||||
n.quesAnswer = quesAnswer |
||||
} |
||||
} |
||||
|
||||
// 填空题需要区分部分正确还是正确、错误 |
||||
let rightLen = 0 |
||||
if (n.userAnswerFill) rightLen = n.userAnswerFill.filter(m => m.correct).length // 正确的空的数量 |
||||
n.isCorrect = n.userScore && n.questionScore === n.userScore ? 1 : (rightLen ? 3 : 2) |
||||
} else if (type === 'essay') { // 简答题 |
||||
n.isCorrect = 4 // 简答题显示待判分 |
||||
} |
||||
}) |
||||
}) |
||||
|
||||
this.essayExist = essayExist // 是否存在简答题 |
||||
this.paper = paper |
||||
let { form } = this |
||||
this.info = { |
||||
workNumber: form.workNumber, |
||||
timeSum: form.timeSum, |
||||
instructor: form.instructor, |
||||
submitTime: form.submitTime, |
||||
score: form.score, |
||||
className: form.className, |
||||
userName: form.userName |
||||
} |
||||
|
||||
this.loading = false |
||||
} catch (e) { |
||||
this.loading = false |
||||
} |
||||
}, |
||||
// 答题卡筛选 |
||||
filterStatus (e) { |
||||
this.sheetStatus = this.sheetStatus === e ? '' : e |
||||
}, |
||||
// 处理题干显示 |
||||
getQuesStem (ques) { |
||||
let { stem } = ques |
||||
if (ques.questionType === 'fill_blank') { // 填空题 |
||||
return stem |
||||
let { fills } = ques |
||||
|
||||
const regex = /<span class="gapfilling-span" data-id="(.*?)">______<\/span>/g |
||||
let match |
||||
let index = 0 // 用于跟踪索引 |
||||
let result = stem |
||||
|
||||
while ((match = regex.exec(stem)) !== null) { |
||||
const newInput = `______` |
||||
result = result.replace(match[0], newInput) |
||||
index++ |
||||
} |
||||
return result |
||||
} else { |
||||
return stem |
||||
} |
||||
}, |
||||
// 下载附件 |
||||
download (ques) { |
||||
Util.downloadFile(ques.attachmentName, ques.attachmentUrl) |
||||
}, |
||||
// 导出 |
||||
exportPage () { |
||||
const form = Object.assign(this.form, this.info) |
||||
const list = JSON.parse(JSON.stringify(this.expData)) |
||||
list.map((e, i) => { |
||||
const item = this.userScores.find(n => n.judgmentId == e.judgmentId) |
||||
if (item && item.runThePicture) e.runThePicture = item.runThePicture |
||||
if (item && item.runThePictureList) e.runThePictureList = item.runThePictureList |
||||
e.id = i + 1 |
||||
// if (e.referenceAnswer && typeof e.referenceAnswer === 'string') e.referenceAnswer = e.referenceAnswer.replace(/<[^>]+>/g, '').replace(/( |&|%s)/g, '').replace(/>/g, '>').replace(/</g, '<') |
||||
if (e.answer && typeof e.answer === 'string') e.answer = e.answer.replace(/<[^>]+>/g, '').replace(/( |&|%s)/g, '').replace(/>/g, '>').replace(/</g, '<') |
||||
}) |
||||
for (const i in form) { |
||||
if (form[i] && typeof form[i] === 'string') form[i] = form[i].replace(/<[^>]+>/g, '') |
||||
} |
||||
form.purpose = form.purpose.replace(/<[^>]+>/g, '') |
||||
this.$post(this.project ? this.api.exportBankExperimentReport : this.api.exportLabReport, { |
||||
...form, |
||||
experimentalData: list |
||||
}).then(res => { |
||||
console.log(res) |
||||
Util.downloadFileDirect(`实验报告.docx`, new Blob([res])) |
||||
}).catch(res => { }) |
||||
}, |
||||
} |
||||
}; |
||||
</script> |
||||
|
||||
<style lang="scss" scoped> |
||||
.wrap { |
||||
padding: 10px; |
||||
} |
||||
|
||||
.text-right { |
||||
text-align: right; |
||||
} |
||||
|
||||
.text-red { |
||||
color: #f00; |
||||
} |
||||
|
||||
code, |
||||
kbd, |
||||
samp { |
||||
font-family: 'PingFang SC', 'Helvetica Neue', Helvetica, 'microsoft yahei', arial, STHeiTi, sans-serif; |
||||
word-wrap: break-word; |
||||
white-space: pre-wrap; |
||||
} |
||||
|
||||
/deep/ pre { |
||||
white-space: pre-wrap; |
||||
/* css-3 */ |
||||
white-space: -moz-pre-wrap; |
||||
/* Mozilla, since 1999 */ |
||||
white-space: pre-wrap; |
||||
/* Opera 4-6 */ |
||||
white-space: -o-pre-wrap; |
||||
/* Opera 7 */ |
||||
word-wrap: break-word; |
||||
/* Internet Explorer 5.5+ */ |
||||
word-break: break-all; |
||||
overflow: hidden; |
||||
font-size: 12px; |
||||
font-weight: 400; |
||||
font-family: 'PingFang SC', 'Helvetica Neue', Helvetica, 'microsoft yahei', arial, STHeiTi, sans-serif; |
||||
} |
||||
|
||||
.report { |
||||
display: flex; |
||||
|
||||
.r-title { |
||||
margin-bottom: 40px; |
||||
font-size: 24px; |
||||
text-align: center; |
||||
color: #333; |
||||
} |
||||
|
||||
.info { |
||||
padding: 20px 16px; |
||||
border: 1px solid #e1e6f2; |
||||
} |
||||
|
||||
.l-title { |
||||
display: flex; |
||||
align-items: center; |
||||
padding: 5px 8px; |
||||
margin-bottom: 12px; |
||||
font-size: 14px; |
||||
color: #333; |
||||
background-color: #f7f5ff; |
||||
} |
||||
|
||||
.info-list { |
||||
display: flex; |
||||
flex-wrap: wrap; |
||||
padding: 10px 0 0 20px; |
||||
|
||||
li { |
||||
display: inline-flex; |
||||
width: 23%; |
||||
padding: 0 10px; |
||||
margin-bottom: 34px; |
||||
} |
||||
|
||||
&.edit { |
||||
li { |
||||
align-items: center; |
||||
} |
||||
} |
||||
|
||||
label { |
||||
font-size: 14px; |
||||
color: #333; |
||||
white-space: nowrap; |
||||
} |
||||
|
||||
span { |
||||
min-width: 150px; |
||||
padding: 0 10px 3px; |
||||
border-bottom: 1px solid #e1e6f2; |
||||
} |
||||
|
||||
/deep/.el-input { |
||||
width: 174px; |
||||
} |
||||
} |
||||
|
||||
.score-wrap { |
||||
position: relative; |
||||
min-width: 150px; |
||||
border-bottom: 1px solid #e1e6f2; |
||||
|
||||
em { |
||||
position: absolute; |
||||
top: -12px; |
||||
left: 30px; |
||||
font-family: din; |
||||
font-size: 30px; |
||||
font-weight: 600; |
||||
color: #0b1d30; |
||||
} |
||||
|
||||
img { |
||||
position: absolute; |
||||
bottom: -15px; |
||||
left: 0; |
||||
} |
||||
|
||||
.exist { |
||||
position: absolute; |
||||
left: 70px; |
||||
white-space: nowrap; |
||||
color: #f00; |
||||
} |
||||
} |
||||
|
||||
/deep/.el-textarea .el-textarea__inner, |
||||
.pre-wrap { |
||||
min-height: 72px; |
||||
padding: 10px 16px; |
||||
font-size: 14px; |
||||
color: #333; |
||||
|
||||
&.edit { |
||||
color: #abb3c6; |
||||
border: 1px solid #cacfdb; |
||||
border-radius: 4px; |
||||
background-color: #f6f7f9; |
||||
} |
||||
} |
||||
|
||||
/deep/ .table th { |
||||
background-color: #e5dfff !important; |
||||
|
||||
.cell { |
||||
line-height: 35px; |
||||
color: #fff; |
||||
} |
||||
} |
||||
|
||||
.left { |
||||
width: 290px; |
||||
max-height: calc(100vh - 267px); |
||||
margin-right: 15px; |
||||
background-color: #fff; |
||||
overflow: auto; |
||||
|
||||
.title { |
||||
padding: 10px 0; |
||||
font-size: 16px; |
||||
text-align: center; |
||||
color: #333; |
||||
} |
||||
|
||||
.progress { |
||||
padding: 10px; |
||||
color: #5a5a5a; |
||||
background-color: #d4e9ff; |
||||
} |
||||
|
||||
.type-wrap { |
||||
padding: 10px; |
||||
|
||||
.type { |
||||
margin-bottom: 20px; |
||||
} |
||||
|
||||
.stem { |
||||
font-size: 15px; |
||||
color: #333; |
||||
} |
||||
} |
||||
|
||||
.serials { |
||||
display: flex; |
||||
flex-wrap: wrap; |
||||
margin-top: 5px; |
||||
|
||||
li { |
||||
position: relative; |
||||
width: 30px; |
||||
margin: 7px 9px; |
||||
font-size: 13px; |
||||
text-align: center; |
||||
} |
||||
|
||||
.serial { |
||||
color: #505050; |
||||
line-height: 30px; |
||||
border: 1px solid #d3d3d3; |
||||
border-bottom: 1px solid transparent; |
||||
} |
||||
|
||||
.status1 .serial { |
||||
color: #fff; |
||||
background-color: #2abd8c; |
||||
border-color: #2abd8c; |
||||
} |
||||
|
||||
.status2 .serial { |
||||
color: #fff; |
||||
background-color: #e75050; |
||||
border-color: #e75050; |
||||
} |
||||
|
||||
.status3 .serial { |
||||
color: #2abd8c; |
||||
border-color: #2abd8c; |
||||
} |
||||
|
||||
.status4 .serial { |
||||
color: #fff; |
||||
background-color: #fe9f0a; |
||||
border-color: #fe9f0a; |
||||
} |
||||
|
||||
.score { |
||||
height: 22px; |
||||
border: 1px solid #d3d3d3; |
||||
border-top: 0; |
||||
line-height: 22px; |
||||
} |
||||
} |
||||
|
||||
.status-filter { |
||||
display: flex; |
||||
justify-content: space-between; |
||||
padding: 10px; |
||||
border-top: 1px solid #e5e5e5; |
||||
|
||||
li { |
||||
display: inline-flex; |
||||
align-items: center; |
||||
padding: 0 3px; |
||||
font-size: 12px; |
||||
color: #333; |
||||
cursor: pointer; |
||||
border: 1px solid transparent; |
||||
|
||||
&:before { |
||||
content: ''; |
||||
width: 13px; |
||||
height: 13px; |
||||
margin-right: 5px; |
||||
border: 1px solid transparent; |
||||
} |
||||
|
||||
&:first-child { |
||||
&.active { |
||||
color: #2abd8c; |
||||
border-color: #2abd8c; |
||||
} |
||||
|
||||
&:before { |
||||
background-color: #2abd8c; |
||||
} |
||||
} |
||||
|
||||
&:nth-child(2) { |
||||
&.active { |
||||
color: #e75050; |
||||
border-color: #e75050; |
||||
} |
||||
|
||||
&:before { |
||||
background-color: #e75050; |
||||
} |
||||
} |
||||
|
||||
&:nth-child(3) { |
||||
&.active { |
||||
color: #2abd8c; |
||||
border-color: #2abd8c; |
||||
} |
||||
|
||||
&:before { |
||||
border-color: #2abd8c; |
||||
} |
||||
} |
||||
|
||||
&:last-child { |
||||
&.active { |
||||
color: #fe9f0a; |
||||
border-color: #fe9f0a; |
||||
} |
||||
|
||||
&:before { |
||||
background-color: #fe9f0a; |
||||
} |
||||
} |
||||
|
||||
&.active { |
||||
font-weight: 600; |
||||
} |
||||
} |
||||
} |
||||
} |
||||
|
||||
.right { |
||||
width: calc(100% - 359px); |
||||
height: calc(100vh - 287px); |
||||
padding: 10px; |
||||
background-color: #fff; |
||||
overflow: auto; |
||||
|
||||
&>li { |
||||
margin-bottom: 15px; |
||||
} |
||||
|
||||
.outline { |
||||
display: flex; |
||||
justify-content: space-between; |
||||
align-items: center; |
||||
padding: 10px 15px; |
||||
font-size: 15px; |
||||
font-weight: 600; |
||||
color: #333; |
||||
background-color: #e8f0ff; |
||||
} |
||||
|
||||
.shrink { |
||||
cursor: pointer; |
||||
transition: .5s; |
||||
|
||||
&.active { |
||||
transform: rotate(180deg); |
||||
} |
||||
} |
||||
|
||||
.ques { |
||||
max-height: none; |
||||
padding: 15px; |
||||
margin-bottom: 15px; |
||||
transition: all 1.5s; |
||||
overflow: hidden; |
||||
|
||||
&.hide { |
||||
max-height: 10px; |
||||
} |
||||
} |
||||
|
||||
.item:not(:last-child) { |
||||
padding-bottom: 15px; |
||||
margin-bottom: 15px; |
||||
border-bottom: 1px dashed #e1e1e1; |
||||
} |
||||
|
||||
.stem-wrap { |
||||
display: flex; |
||||
align-items: baseline; |
||||
margin-bottom: 10px; |
||||
} |
||||
|
||||
.tag { |
||||
margin-left: 10px; |
||||
cursor: pointer; |
||||
|
||||
&:hover { |
||||
opacity: .9; |
||||
} |
||||
} |
||||
|
||||
.labels { |
||||
display: inline-flex; |
||||
align-items: center; |
||||
} |
||||
|
||||
.label { |
||||
padding: 3px 5px; |
||||
margin-right: 10px; |
||||
font-size: 12px; |
||||
line-height: 1; |
||||
color: #9076FF; |
||||
white-space: nowrap; |
||||
border: 1px solid; |
||||
border-radius: 2px; |
||||
} |
||||
|
||||
.stem { |
||||
max-width: calc(100% - 207px); |
||||
} |
||||
|
||||
.ques-info { |
||||
position: relative; |
||||
padding: 10px; |
||||
background-color: #f3f3f3; |
||||
overflow: hidden; |
||||
|
||||
&.essay { |
||||
&:after { |
||||
content: '待 判 分'; |
||||
position: absolute; |
||||
top: 17px; |
||||
right: -33px; |
||||
padding: 5px 36px; |
||||
font-size: 14px; |
||||
color: #fff; |
||||
background-color: #fe9f0a; |
||||
transform: rotate(45deg); |
||||
} |
||||
} |
||||
} |
||||
|
||||
.line { |
||||
display: flex; |
||||
align-items: center; |
||||
margin-bottom: 8px; |
||||
font-size: 13px; |
||||
color: #333; |
||||
|
||||
&:last-child { |
||||
margin-bottom: 0; |
||||
} |
||||
} |
||||
|
||||
.fill-answers { |
||||
display: inline-flex; |
||||
align-items: center; |
||||
} |
||||
|
||||
.fill-answer { |
||||
display: inline-flex; |
||||
align-items: center; |
||||
margin-right: 10px; |
||||
|
||||
.icon { |
||||
margin-left: 7px; |
||||
} |
||||
} |
||||
|
||||
.score-input { |
||||
width: 100px; |
||||
margin-right: 5px; |
||||
} |
||||
|
||||
.fill-input { |
||||
width: 100px; |
||||
height: 28px; |
||||
padding: 0 15px; |
||||
margin: 0 10px; |
||||
font-size: 13px; |
||||
line-height: 28px; |
||||
color: #606266; |
||||
border: 1px solid #DCDEE0; |
||||
border-radius: 2px; |
||||
|
||||
&:focus { |
||||
outline: none; |
||||
} |
||||
} |
||||
|
||||
.opt { |
||||
display: flex; |
||||
flex-wrap: wrap; |
||||
align-items: baseline; |
||||
padding-left: 10px; |
||||
margin-bottom: 5px; |
||||
font-size: 14px; |
||||
color: #707070; |
||||
line-height: 1.6; |
||||
|
||||
.el-radio, |
||||
.el-checkbox { |
||||
margin-right: 15px; |
||||
} |
||||
|
||||
.el-radio__label { |
||||
display: none; |
||||
} |
||||
|
||||
.text { |
||||
max-width: calc(100% - 48px); |
||||
} |
||||
} |
||||
} |
||||
} |
||||
|
||||
.result-pic { |
||||
margin: 10px 0; |
||||
} |
||||
|
||||
@media (max-width: 1650px) { |
||||
.wrap { |
||||
padding: 12px 200px 20px; |
||||
} |
||||
} |
||||
|
||||
@media (max-width: 1430px) { |
||||
.wrap { |
||||
padding: 12px 100px 20px; |
||||
} |
||||
} |
||||
</style> |
Loading…
Reference in new issue