After Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 218 B |
Before Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 1.2 MiB |
After Width: | Height: | Size: 766 B |
After Width: | Height: | Size: 545 B |
After Width: | Height: | Size: 545 B |
@ -0,0 +1,600 @@ |
|||||||
|
<template> |
||||||
|
<div class="index"> |
||||||
|
<div class="top"> |
||||||
|
<p class="names">{{ form.name }}</p> |
||||||
|
|
||||||
|
<div class="count m-r-30"> |
||||||
|
用时 |
||||||
|
<span>{{ timeSum.day }}</span>天 |
||||||
|
<span>{{ timeSum.hour }}</span>小时 |
||||||
|
<span>{{ timeSum.minutes }}</span>分 |
||||||
|
<span>{{ timeSum.seconds }}</span>秒 |
||||||
|
</div> |
||||||
|
|
||||||
|
<img class="exit" src="@/assets/images/exit.svg" alt="" @click="close"> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="wrap"> |
||||||
|
<div class="left"> |
||||||
|
<h6 class="title">答题卡</h6> |
||||||
|
<div class="progress"> |
||||||
|
<p class="fs-14">答题进度</p> |
||||||
|
<el-progress class="m-t-5 m-b-5" :percentage="progress" :format="progressFormat"></el-progress> |
||||||
|
<p>共{{ form.questionCount }}题,满分{{ form.score }}分</p> |
||||||
|
</div> |
||||||
|
<div v-if="form.paperOutline" class="type-wrap"> |
||||||
|
<div v-for="(item, i) in form.paperOutline" :key="i" class="type"> |
||||||
|
<h6 class="stem">{{ arabicToChinese(i + 1) }}、{{ item.questionTypeName }}(本题共{{ item.questionNum }}小题,共{{ |
||||||
|
item.targetScore }}分)</h6> |
||||||
|
<ul class="serials"> |
||||||
|
<template v-for="(ques, j) in item.examQuestions"> |
||||||
|
<li |
||||||
|
v-if="!sheetStatus || (sheetStatus === 1 && !ques.answered) || (sheetStatus === 2 && ques.answered) || (sheetStatus === 3 && ques.partAnswer) || (sheetStatus === 4 && ques.sign)" |
||||||
|
:key="j" :class="{ answered: ques.answered, partAnswer: ques.partAnswer }"> |
||||||
|
<img v-if="ques.sign" class="tag" src="@/assets/images/tag-active.svg" alt=""> |
||||||
|
{{ j + 1 }} |
||||||
|
</li> |
||||||
|
</template> |
||||||
|
</ul> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<ul class="status-filter"> |
||||||
|
<li :class="{ active: sheetStatus === 1 }" @click="filterStatus(1)">未作答</li> |
||||||
|
<li :class="{ active: sheetStatus === 2 }" @click="filterStatus(2)">已作答</li> |
||||||
|
<li :class="{ active: sheetStatus === 3 }" @click="filterStatus(3)">部分已作答</li> |
||||||
|
<li :class="{ active: sheetStatus === 4 }" @click="filterStatus(4)"><img class="tag" |
||||||
|
src="@/assets/images/tag-active.svg" alt=""> 已标记</li> |
||||||
|
</ul> |
||||||
|
</div> |
||||||
|
|
||||||
|
<ul v-if="form.paperOutline" class="ques-wrap"> |
||||||
|
<li v-for="(item, i) in form.paperOutline" :key="i"> |
||||||
|
<div class="outline"> |
||||||
|
{{ arabicToChinese(i + 1) }}、{{ item.questionTypeName }}(本题共{{ item.questionNum }}小题,共{{ |
||||||
|
item.targetScore }}分) |
||||||
|
<img :class="['shrink', { active: item.shrink }]" src="@/assets/images/shrink.svg" alt="" |
||||||
|
@click="item.shrink = !item.shrink"> |
||||||
|
</div> |
||||||
|
<div :class="['ques', { hide: item.shrink }]"> |
||||||
|
<div v-for="(ques, j) in item.examQuestions" :key="j" class="item"> |
||||||
|
<div class="stem-wrap"> |
||||||
|
<span class="label">{{ j + 1 }} / {{ item.questionNum }}</span> |
||||||
|
<span class="label">{{ item.questionTypeName }}</span> |
||||||
|
<div :id="'stem' + ques.id" v-html="getQuesStem(ques)"></div> |
||||||
|
<p v-if="item.questionType !== 'fill_blank'">({{ ques.score }}分)</p> |
||||||
|
<img class="tag" :src="require('@/assets/images/' + (ques.sign ? 'tag-active' : 'tag') + '.svg')" alt="" |
||||||
|
@click="ques.sign = ques.sign ? 0 : 1"> |
||||||
|
</div> |
||||||
|
|
||||||
|
<!-- 单选、多选、判断的选项 --> |
||||||
|
<template |
||||||
|
v-if="item.questionType !== 'fill_blank' && item.questionType !== 'essay' && ques.questionAnswerVersionsList"> |
||||||
|
<div v-for="(opt, j) in ques.questionAnswerVersionsList" :key="j" class="opt"> |
||||||
|
<el-checkbox v-if="item.questionType === 'multiple_choice'" v-model="opt.answer" :true-label="1" |
||||||
|
@change="mulChange(ques)"></el-checkbox> |
||||||
|
<el-radio v-else v-model="opt.answer" :true-label="1" :label="1" |
||||||
|
@change="singleChange(ques, j)"></el-radio> |
||||||
|
|
||||||
|
<span>{{ numToLetter(j) }}. </span> |
||||||
|
<div class="text" v-html="opt.optionText"></div> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
<!-- 简答题需要展示题干文件及富文本 --> |
||||||
|
<template v-if="item.questionType === 'essay'"> |
||||||
|
<div v-if="ques.stemAttachment" class="m-b-20"> |
||||||
|
<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> |
||||||
|
<UeditorPlus :ref="'essayAnswer' + ques.id" v-model="ques.answer" |
||||||
|
@ready="editor => essayAnswerReady(editor, ques)" /> |
||||||
|
<!-- v-if="ques.allowAttachment" --> |
||||||
|
<div class="m-t-20"> |
||||||
|
<div v-if="form.uploadInstructions" class="flex m-b-10 fs-12"> |
||||||
|
<span>上传附件:</span> |
||||||
|
<div v-html="form.uploadInstructions"></div> |
||||||
|
</div> |
||||||
|
<el-upload action="#"> |
||||||
|
<el-button size="small" type="primary">上传文件</el-button> |
||||||
|
</el-upload> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</li> |
||||||
|
</ul> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script> |
||||||
|
import Util from '@/libs/util' |
||||||
|
import Setting from "@/setting" |
||||||
|
import QuesConst from '@/const/ques' |
||||||
|
import TestPaperConst from '@/const/testPaper' |
||||||
|
import _ from 'lodash' |
||||||
|
import Oss from '@/components/upload/upload.js' |
||||||
|
import Upload from '@/components/upload' |
||||||
|
import UeditorPlus from '@/components/ueditorPlus' |
||||||
|
|
||||||
|
export default { |
||||||
|
components: { |
||||||
|
Upload, UeditorPlus |
||||||
|
}, |
||||||
|
data () { |
||||||
|
return { |
||||||
|
questionTypes: QuesConst.questionTypes, |
||||||
|
numToLetter: Util.numToLetter, |
||||||
|
arabicToChinese: Util.arabicToChinese, |
||||||
|
id: +this.$route.query.id, |
||||||
|
entryTime: '', |
||||||
|
counterTimer: null, // 获取setInterval对象值 |
||||||
|
timeSumVal: 0, |
||||||
|
// 用时 |
||||||
|
timeSum: { |
||||||
|
day: 0, |
||||||
|
seconds: 0, |
||||||
|
minutes: 0, |
||||||
|
hour: 0, |
||||||
|
}, |
||||||
|
totalAnswered: 0, |
||||||
|
progress: 0, |
||||||
|
sheetStatus: '', |
||||||
|
form: { |
||||||
|
questionCount: 0, |
||||||
|
}, |
||||||
|
}; |
||||||
|
}, |
||||||
|
mounted () { |
||||||
|
this.$once('hook:beforeDestroy', function () { |
||||||
|
clearInterval(this.counterTimer) |
||||||
|
}) |
||||||
|
|
||||||
|
this.getPaper() |
||||||
|
}, |
||||||
|
methods: { |
||||||
|
// 获取试卷详情 |
||||||
|
async getPaper (now) { |
||||||
|
try { |
||||||
|
this.entryTime = await Util.getNow() |
||||||
|
const { id } = this |
||||||
|
if (id) { |
||||||
|
// 试卷详情 |
||||||
|
const { examPaper } = await this.$get(this.api.examPaperDetails, { id }) |
||||||
|
|
||||||
|
this.startCount() |
||||||
|
|
||||||
|
const r = examPaper |
||||||
|
const paper = r.paperOutline |
||||||
|
const types = this.questionTypes |
||||||
|
paper.map(e => { |
||||||
|
const type = e.questionType |
||||||
|
e.questionTypeName = types.find(n => n.id === type).name |
||||||
|
e.shrink = false |
||||||
|
e.examQuestions.map(n => { |
||||||
|
Object.assign(n, n.question) |
||||||
|
n.sign = 0 |
||||||
|
const opts = n.questionAnswerVersionsList |
||||||
|
if (type !== 'fill_blank' && type !== 'essay' && opts) { // 选择题 |
||||||
|
opts.map(m => { |
||||||
|
m.answer = 0 |
||||||
|
}) |
||||||
|
} else { // 简答题 |
||||||
|
n.answer = '' |
||||||
|
// 附件 |
||||||
|
n.uploadList = [] |
||||||
|
} |
||||||
|
}) |
||||||
|
}) |
||||||
|
this.form = r |
||||||
|
|
||||||
|
// 给填空题的每个空监听input事件,用以显示已作答状态 |
||||||
|
this.$nextTick(() => { |
||||||
|
paper.map(e => { |
||||||
|
e.examQuestions.map(n => { |
||||||
|
if (e.questionType === 'fill_blank') { |
||||||
|
const stem = document.querySelector(`#stem` + n.id) |
||||||
|
if (stem) { |
||||||
|
const inputs = stem.querySelectorAll('.fill-input') |
||||||
|
if (inputs) { |
||||||
|
for (const e of inputs) { |
||||||
|
e.addEventListener('input', () => { |
||||||
|
const answers = [] |
||||||
|
for (const e of inputs) { |
||||||
|
e.value && answers.push(e.value) |
||||||
|
} |
||||||
|
n.answered = answers.length === inputs.length ? 1 : 0 |
||||||
|
n.partAnswer = answers.length && answers.length !== inputs.length ? 1 : 0 |
||||||
|
}) |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
}) |
||||||
|
}) |
||||||
|
this.calcProgress() |
||||||
|
}) |
||||||
|
console.log("🚀 ~ getPaper ~ r:", r) |
||||||
|
} |
||||||
|
} catch (e) { } |
||||||
|
}, |
||||||
|
// 计时器 |
||||||
|
handleCounter (counterTime, isCount) { |
||||||
|
let leave1 = counterTime % (24 * 3600) //计算天数后剩余的毫秒数 |
||||||
|
let leave2 = leave1 % 3600 //计算小时数后剩余的毫秒数 |
||||||
|
let leave3 = leave2 % 60 //计算分钟数后剩余的毫秒数 |
||||||
|
let day = Math.floor(counterTime / (24 * 3600)) //计算相差天数 |
||||||
|
let hour = Math.floor(leave1 / 3600) //计算相差小时 |
||||||
|
let minutes = Math.floor(leave2 / 60) //计算相差分钟 |
||||||
|
let seconds = Math.round(leave3) //计算相差秒 |
||||||
|
day = this.timeFormat(day) |
||||||
|
hour = this.timeFormat(hour) |
||||||
|
minutes = this.timeFormat(minutes) |
||||||
|
seconds = this.timeFormat(seconds) |
||||||
|
const count = this[isCount ? 'counterVal' : 'timeSum'] |
||||||
|
count.day = day |
||||||
|
count.hour = hour |
||||||
|
count.minutes = minutes |
||||||
|
count.seconds = seconds |
||||||
|
}, |
||||||
|
// 启动倒计时 |
||||||
|
startCount () { |
||||||
|
clearInterval(this.counterTimer) |
||||||
|
this.counterTimer = setInterval(() => { |
||||||
|
this.timeSumVal >= 0 && this.handleCounter(this.timeSumVal++) |
||||||
|
}, 1000) |
||||||
|
}, |
||||||
|
timeFormat (param) { |
||||||
|
return param < 10 ? '0' + param : param |
||||||
|
}, |
||||||
|
// 计算答题进度 |
||||||
|
calcProgress () { |
||||||
|
let answered = 0 |
||||||
|
this.form.paperOutline.map(e => { |
||||||
|
answered += e.examQuestions.filter(n => n.answered).length |
||||||
|
}) |
||||||
|
this.totalAnswered = answered |
||||||
|
this.progress = +(answered / this.form.questionCount * 100).toFixed(1) |
||||||
|
}, |
||||||
|
// 答题进度格式 |
||||||
|
progressFormat (e) { |
||||||
|
return this.totalAnswered + '/' + this.form.questionCount |
||||||
|
}, |
||||||
|
// 答题卡筛选 |
||||||
|
filterStatus (e) { |
||||||
|
this.sheetStatus = this.sheetStatus === e ? '' : e |
||||||
|
}, |
||||||
|
// 处理题干显示 |
||||||
|
getQuesStem (ques) { |
||||||
|
let { stem } = ques |
||||||
|
if (ques.questionType === 'fill_blank') { // 填空题 |
||||||
|
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 = `<input type="text" class="fill-input" value="${fills && fills.length ? fills[index] : ''}">` |
||||||
|
result = result.replace(match[0], newInput) |
||||||
|
index++ |
||||||
|
} |
||||||
|
return result |
||||||
|
} else { |
||||||
|
return stem |
||||||
|
} |
||||||
|
}, |
||||||
|
// 单选题回调 |
||||||
|
singleChange (ques, j) { |
||||||
|
ques.questionAnswerVersionsList.map(e => { |
||||||
|
e.answer = 0 |
||||||
|
}) |
||||||
|
ques.questionAnswerVersionsList[j].answer = 1 |
||||||
|
|
||||||
|
ques.answered = 1 |
||||||
|
this.calcProgress() |
||||||
|
}, |
||||||
|
// 多选题回调 |
||||||
|
mulChange (ques) { |
||||||
|
ques.answered = ques.questionAnswerVersionsList.some(e => e.answer) |
||||||
|
this.calcProgress() |
||||||
|
}, |
||||||
|
|
||||||
|
// 简答题富文本加载完毕回调 |
||||||
|
essayAnswerReady (editor, ques) { |
||||||
|
editor.ques = ques |
||||||
|
editor.addListener('contentChange', () => { |
||||||
|
ques.answered = editor.getContent() ? 1 : 0 |
||||||
|
this.calcProgress() |
||||||
|
}) |
||||||
|
ques.answer && editor.setContent(ques.answer) |
||||||
|
}, |
||||||
|
// 下载附件 |
||||||
|
download (url) { |
||||||
|
Util.downloadFile(url, url) |
||||||
|
}, |
||||||
|
handleRemove (ques) { |
||||||
|
Oss.del(ques.attachmentUrl) |
||||||
|
ques.attachmentName = '' |
||||||
|
ques.attachmentUrl = '' |
||||||
|
}, |
||||||
|
uploadSuccess (file, ques) { |
||||||
|
ques.attachmentName = file.name |
||||||
|
ques.attachmentUrl = file.url |
||||||
|
}, |
||||||
|
// 解析富文本加载完毕回调 |
||||||
|
answerAnalysisReady (editor) { |
||||||
|
this.answerAnalysis && editor.setContent(this.answerAnalysis) |
||||||
|
}, |
||||||
|
close () { |
||||||
|
window.close() |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
</script> |
||||||
|
|
||||||
|
<style lang="scss" scoped> |
||||||
|
.top { |
||||||
|
display: flex; |
||||||
|
justify-content: space-between; |
||||||
|
align-items: center; |
||||||
|
padding: 10px 20px; |
||||||
|
color: #fff; |
||||||
|
background-color: #5786fc; |
||||||
|
|
||||||
|
.item { |
||||||
|
display: inline-flex; |
||||||
|
align-items: center; |
||||||
|
} |
||||||
|
|
||||||
|
.names { |
||||||
|
font-size: 18px; |
||||||
|
font-weight: 600; |
||||||
|
} |
||||||
|
|
||||||
|
.submit { |
||||||
|
width: 106px; |
||||||
|
font-size: 15px; |
||||||
|
} |
||||||
|
|
||||||
|
.exit { |
||||||
|
margin-left: 20px; |
||||||
|
cursor: pointer; |
||||||
|
|
||||||
|
&:hover { |
||||||
|
opacity: .9; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/deep/.wrap { |
||||||
|
display: flex; |
||||||
|
padding: 15px; |
||||||
|
|
||||||
|
.left { |
||||||
|
width: 300px; |
||||||
|
margin-right: 15px; |
||||||
|
background-color: #fff; |
||||||
|
|
||||||
|
.title { |
||||||
|
padding: 10px 0; |
||||||
|
font-size: 16px; |
||||||
|
text-align: center; |
||||||
|
color: #333; |
||||||
|
} |
||||||
|
|
||||||
|
.progress { |
||||||
|
padding: 10px; |
||||||
|
color: #5a5a5a; |
||||||
|
background-color: #d4e9ff; |
||||||
|
} |
||||||
|
|
||||||
|
.type-wrap { |
||||||
|
max-height: calc(100vh - 248px); |
||||||
|
padding: 10px; |
||||||
|
overflow: auto; |
||||||
|
|
||||||
|
.type { |
||||||
|
margin-bottom: 20px; |
||||||
|
} |
||||||
|
|
||||||
|
.stem { |
||||||
|
font-size: 15px; |
||||||
|
color: #333; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
.serials { |
||||||
|
display: flex; |
||||||
|
flex-wrap: wrap; |
||||||
|
margin-top: 5px; |
||||||
|
|
||||||
|
li { |
||||||
|
position: relative; |
||||||
|
width: 35px; |
||||||
|
margin: 7px 9px; |
||||||
|
font-size: 13px; |
||||||
|
text-align: center; |
||||||
|
line-height: 35px; |
||||||
|
color: #505050; |
||||||
|
border: 1px solid #d3d3d3; |
||||||
|
|
||||||
|
&.answered { |
||||||
|
color: #fff; |
||||||
|
background-color: #66b2ff; |
||||||
|
border-color: #66b2ff; |
||||||
|
} |
||||||
|
|
||||||
|
&.partAnswer { |
||||||
|
border-color: #66b2ff; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
.tag { |
||||||
|
position: absolute; |
||||||
|
top: -2px; |
||||||
|
left: -4px; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
.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; |
||||||
|
|
||||||
|
&:not(:last-child):before { |
||||||
|
content: ''; |
||||||
|
width: 13px; |
||||||
|
height: 13px; |
||||||
|
margin-right: 5px; |
||||||
|
border: 1px solid #ccc; |
||||||
|
} |
||||||
|
|
||||||
|
&:nth-child(2):before { |
||||||
|
background-color: #56aaff; |
||||||
|
border: 0; |
||||||
|
} |
||||||
|
|
||||||
|
&:nth-child(3):before { |
||||||
|
border-color: #56aaff; |
||||||
|
} |
||||||
|
|
||||||
|
&.active { |
||||||
|
font-weight: 600; |
||||||
|
color: #007eff; |
||||||
|
border-color: #007eff; |
||||||
|
|
||||||
|
&:last-child { |
||||||
|
color: #d81e06; |
||||||
|
border-color: #d81e06; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
.ques-wrap { |
||||||
|
width: calc(100% - 315px); |
||||||
|
height: calc(100vh - 80px); |
||||||
|
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: center; |
||||||
|
margin-bottom: 10px; |
||||||
|
} |
||||||
|
|
||||||
|
.tag { |
||||||
|
margin-left: 10px; |
||||||
|
cursor: pointer; |
||||||
|
|
||||||
|
&:hover { |
||||||
|
opacity: .9; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
.label { |
||||||
|
padding: 3px 5px; |
||||||
|
margin-right: 10px; |
||||||
|
font-size: 12px; |
||||||
|
line-height: 1; |
||||||
|
color: $main-color; |
||||||
|
border: 1px solid; |
||||||
|
border-radius: 2px; |
||||||
|
} |
||||||
|
|
||||||
|
.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); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
</style> |
@ -0,0 +1,17 @@ |
|||||||
|
/** |
||||||
|
* 试卷 |
||||||
|
* */ |
||||||
|
export default { |
||||||
|
namespaced: true, |
||||||
|
state: { |
||||||
|
form: {}, |
||||||
|
}, |
||||||
|
mutations: { |
||||||
|
setForm: (state, val) => { |
||||||
|
state.form = val |
||||||
|
}, |
||||||
|
}, |
||||||
|
actions: { |
||||||
|
|
||||||
|
} |
||||||
|
}; |