|
|
@@ -1,6 +1,6 @@
|
|
|
<template>
|
|
|
<div class="quiz-editor">
|
|
|
- <div>
|
|
|
+ <div class="quiz-form-wrapper">
|
|
|
<back-title>{{backTitle}}</back-title>
|
|
|
<div class="quiz-form">
|
|
|
<div class="sub-title mb-16">测试详情</div>
|
|
|
@@ -8,13 +8,23 @@
|
|
|
测试名称:
|
|
|
</div>
|
|
|
<c-input class="mb-24" v-model="quiz.name" placeholder="请输入测试名称"></c-input>
|
|
|
- <div class="input-title mb-8">
|
|
|
- 开放测试所需课件状态:
|
|
|
+ <div class="mb-24 type-times-bar">
|
|
|
+ <div class="mr-16">
|
|
|
+ <div class="input-title mb-8">
|
|
|
+ 测试类型:
|
|
|
+ </div>
|
|
|
+ <c-select disabled-display="[ 未选择 ]" v-model="quiz.type" :list="selectItems"></c-select>
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ <div class="input-title mb-8">
|
|
|
+ 最大提交次数:
|
|
|
+ </div>
|
|
|
+ <c-input type="number" v-model="quiz.maxSubmitTime"></c-input>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
- <c-select disabled-display="[ 未选择 ]" v-model="quiz.quizTime" class="mb-24" :list="selectItems"></c-select>
|
|
|
<c-button theme="green" icon="check" block @click="handleSubmit">{{backTitle}}</c-button>
|
|
|
</div>
|
|
|
- <div class="sub-title mt-32">
|
|
|
+ <div class="sub-title mt-32" v-if="selectedQuestions && selectedQuestions.length">
|
|
|
测试题目列表
|
|
|
<c-button :left="4" @click="isFold = !isFold" text :icon="isFold ? 'unfold_more' : 'unfold_less'" theme="blue">
|
|
|
{{isFold ? '展开' : '收起'}}题目
|
|
|
@@ -34,7 +44,7 @@
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <div>
|
|
|
+ <div class="questions">
|
|
|
<div class="sub-title">题库</div>
|
|
|
<question-table v-model="selectedQuestions" selectable/>
|
|
|
</div>
|
|
|
@@ -44,13 +54,13 @@
|
|
|
<script>
|
|
|
import { naming as QuestionKindNaming } from '@/server/enums/question-kind'
|
|
|
import { QuizStateNaming } from '@/server/enums/quiz-state'
|
|
|
-import SlideStateTranslation from '@/server/enums/slide-state-translation'
|
|
|
import QuestionTable from '@/views/quiz/components/QuestionTable'
|
|
|
import QuestionDetailFactory from '@/views/quiz/components/QuestionDetailFactory'
|
|
|
import CInput from '@/components/Basic/CInput'
|
|
|
import CButton from '@/components/Basic/CButton'
|
|
|
import CSelect from '@/components/Basic/CSelect'
|
|
|
import BackTitle from '@/components/Basic/BackTitle'
|
|
|
+import { QuizTypeNaming } from '@/server/enums/quiz-type'
|
|
|
|
|
|
export default {
|
|
|
name: 'QuizEditor',
|
|
|
@@ -67,29 +77,29 @@ export default {
|
|
|
},
|
|
|
data () {
|
|
|
return {
|
|
|
- quiz: { name: '', quizTime: '' },
|
|
|
+ quiz: { name: '', type: '', maxSubmitTime: '0' },
|
|
|
selectedQuestions: [],
|
|
|
// 默认折叠题目,只显示题干
|
|
|
isFold: true,
|
|
|
|
|
|
QuestionKindNaming,
|
|
|
QuizStateNaming,
|
|
|
- SlideStateTranslation
|
|
|
+ QuizTypeNaming
|
|
|
}
|
|
|
},
|
|
|
computed: {
|
|
|
selectItems () {
|
|
|
- return Object.keys(this.SlideStateTranslation).map(key => ({
|
|
|
+ return Object.keys(this.QuizTypeNaming).map(key => ({
|
|
|
value: key,
|
|
|
- display: this.SlideStateTranslation[key]
|
|
|
+ display: this.QuizTypeNaming[key]
|
|
|
}))
|
|
|
}
|
|
|
},
|
|
|
watch: {
|
|
|
initQuiz: {
|
|
|
immediate: true,
|
|
|
- handler ({ id, name, quizTime, questions = [] } = {}) {
|
|
|
- this.quiz = { id, name, quizTime }
|
|
|
+ handler ({ id, name, type, maxSubmitTime, questions = [] } = {}) {
|
|
|
+ this.quiz = { id, name, type, maxSubmitTime }
|
|
|
this.selectedQuestions = questions
|
|
|
}
|
|
|
}
|
|
|
@@ -137,19 +147,41 @@ export default {
|
|
|
width: 30%;
|
|
|
}
|
|
|
|
|
|
- .quiz-form {
|
|
|
- box-sizing: border-box;
|
|
|
- border: 1px solid #cadaea;
|
|
|
- border-radius: 6px;
|
|
|
- padding: 16px;
|
|
|
+ .quiz-form-wrapper {
|
|
|
+ background: #f6fafe;
|
|
|
+ // 模拟溢出的背景
|
|
|
+ padding-bottom: 8px;
|
|
|
+ box-shadow: 0 -8px 0 24px #f6fafe;
|
|
|
+ }
|
|
|
+
|
|
|
+ .questions {
|
|
|
+ flex: 2;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.quiz-form {
|
|
|
+ background: white;
|
|
|
+ box-sizing: border-box;
|
|
|
+ box-shadow: 0 3px 6px rgba(0, 0, 0, .1);
|
|
|
+ border-radius: 6px;
|
|
|
+ padding: 16px;
|
|
|
+}
|
|
|
+
|
|
|
+.type-times-bar {
|
|
|
+ display: flex;
|
|
|
+
|
|
|
+ .c-input {
|
|
|
+ max-width: 120px;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
.selected-question-card {
|
|
|
- border: 1px solid #cadaea;
|
|
|
+ /*border: 1px solid #cadaea;*/
|
|
|
+ box-shadow: 0 3px 6px rgba(0, 0, 0, .1);
|
|
|
border-radius: 6px;
|
|
|
padding: 8px 12px 12px 12px;
|
|
|
font-size: 12px;
|
|
|
+ background: white;
|
|
|
|
|
|
.spacer {
|
|
|
flex: 1;
|
|
|
@@ -165,7 +197,7 @@ export default {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-@media (max-width: 900px) {
|
|
|
+@media (max-width: 860px) {
|
|
|
.quiz-editor {
|
|
|
display: block;
|
|
|
margin: 0 auto;
|
|
|
@@ -175,7 +207,7 @@ export default {
|
|
|
margin: unset;
|
|
|
}
|
|
|
|
|
|
- & > div:last-child {
|
|
|
+ .questions {
|
|
|
/*border-top: 1px #cadaea solid;*/
|
|
|
padding-top: 16px;
|
|
|
margin-top: 24px;
|
|
|
@@ -183,6 +215,12 @@ export default {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+@media (max-width: 1100px) {
|
|
|
+ .quiz-editor .questions {
|
|
|
+ flex: 1;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
.question-preview {
|
|
|
margin: 24px 0 12px 0;
|
|
|
font-size: 14px;
|