提交 33fcc3e0 authored 作者: matian's avatar matian

Merge remote-tracking branch 'origin/master'

...@@ -25,7 +25,6 @@ export default { ...@@ -25,7 +25,6 @@ export default {
position: relative; position: relative;
flex: 1; flex: 1;
padding: 20px; padding: 20px;
overflow: hidden;
} }
.app-main-inner { .app-main-inner {
margin: 0 auto; margin: 0 auto;
......
...@@ -169,7 +169,7 @@ export default { ...@@ -169,7 +169,7 @@ export default {
this.form = Object.assign({}, this.form, data.paper_contents) this.form = Object.assign({}, this.form, data.paper_contents)
} }
if (data.paper_contents && data.paper_contents.rules) { if (data.paper_contents && data.paper_contents.rules) {
this.questionList = data.paper_contents.rules this.questionList = data.paper_contents.rules.slice()
} }
} }
} }
...@@ -237,7 +237,7 @@ export default { ...@@ -237,7 +237,7 @@ export default {
type: 'warning' type: 'warning'
}) })
} else { } else {
this.questionList.push({ ...this.defaultItem }) this.questionList.splice(index + 1, 0, { ...this.defaultItem })
} }
}, },
// 删除 // 删除
......
...@@ -29,8 +29,8 @@ ...@@ -29,8 +29,8 @@
</app-card> </app-card>
</el-col> </el-col>
<!-- 试题序号 --> <!-- 试题序号 -->
<el-col :span="6" ref="questionNumWrapper"> <el-col :span="6" class="is-sticky">
<question-num :list="questions" ref="questionNum" :style="`position:relative;top:${top}px`"> <question-num :list="questions">
<template #footer v-if="data.paper_type === 1"> <template #footer v-if="data.paper_type === 1">
<el-button type="primary" @click="handleSubmit">保存试卷</el-button> <el-button type="primary" @click="handleSubmit">保存试卷</el-button>
</template> </template>
...@@ -81,18 +81,6 @@ export default { ...@@ -81,18 +81,6 @@ export default {
} }
} }
}, },
mounted() {
const questionNumWrapper = this.$refs.questionNumWrapper.$el
const parentTop = questionNumWrapper.getBoundingClientRect().top
document.addEventListener('scroll', () => {
const scrollTop = document.documentElement.scrollTop || document.body.scrollTop
if (scrollTop > parentTop) {
this.top = scrollTop - parentTop + 84
} else {
this.top = 0
}
})
},
methods: { methods: {
// 增加试题 // 增加试题
showSelectQuestion() { showSelectQuestion() {
...@@ -135,10 +123,9 @@ export default { ...@@ -135,10 +123,9 @@ export default {
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.fixed { .is-sticky {
position: relative; position: sticky;
top: 64px; top: 84px;
right: 0;
z-index: 100; z-index: 100;
} }
</style> </style>
<template> <template>
<div class="question-list"> <div class="question-list">
<template v-for="(item, index) in list"> <template v-for="(item, index) in list">
<question-list-item :data="item" :index="index + 1" :key="item.id" v-bind="$attrs" v-on="$listeners"> <question-list-item
:data="item"
:index="index + 1"
:hasChildren="item.children && !!item.children.length"
:key="item.id"
v-bind="$attrs"
v-on="$listeners"
>
<template v-if="item.children && item.children.length"> <template v-if="item.children && item.children.length">
<question-list :list="item.children" :key="item.id" v-bind="$attrs" v-on="$listeners"> <question-list :list="item.children" :key="item.id" v-bind="$attrs" v-on="$listeners">
<template #selection> <template #selection>
......
...@@ -16,75 +16,78 @@ ...@@ -16,75 +16,78 @@
step-strictly step-strictly
:controls="false" :controls="false"
:min="0" :min="0"
:disabled="disableScore" :disabled="disableScore || hasChildren"
style="width: 80px" style="width: 80px"
></el-input-number> ></el-input-number>
</div> </div>
</div> </div>
<!-- 题干 --> <!-- 题干 -->
<div class="question-title" v-html="data.question_content"></div> <div class="question-title">
<div v-html="data.common_content" v-if="hasChildren"></div>
<div v-html="data.question_content" v-else></div>
</div>
</div> </div>
<slot> <slot>
<div class="question-item-bd"> <div class="question-item-bd">
<!-- 单选题 --> <!-- 单选题 -->
<template v-if="questionType === 1"> <template v-if="questionType === 1">
<el-radio-group :disabled="disabled" :value="data.question_answer"> <el-radio-group :disabled="disabled" :value="data.question_answer">
<div class="question-item-option" v-for="item in data.question_options" :key="item.id"> <div class="question-item-option" v-for="item in currentQuestionOptions" :key="item.id">
<el-radio :label="item.id">{{ item.option }}</el-radio> <el-radio :label="item.id">{{ item.abc_option }}</el-radio>
</div> </div>
</el-radio-group> </el-radio-group>
</template> </template>
<!-- 多选题 --> <!-- 多选题 -->
<template v-if="questionType === 2"> <template v-if="questionType === 2">
<el-checkbox-group :disabled="disabled" :value="data.question_answer"> <el-checkbox-group :disabled="disabled" :value="data.question_answer">
<div class="question-item-option" v-for="item in data.question_options" :key="item.id"> <div class="question-item-option" v-for="item in currentQuestionOptions" :key="item.id">
<el-checkbox :label="item.id"> {{ item.option }} </el-checkbox> <el-checkbox :label="item.id"> {{ item.abc_option }} </el-checkbox>
</div> </div>
</el-checkbox-group> </el-checkbox-group>
</template> </template>
<!-- 问答题 --> <!-- 问答题 -->
<template v-if="questionType === 3"> <template v-if="questionType === 3">
<v-editor :value="data.question_analysis"></v-editor> <!-- <v-editor :value="data.question_analysis"></v-editor> -->
</template> </template>
<!-- 判断题 --> <!-- 判断题 -->
<template v-if="questionType === 6"> <template v-if="questionType === 6">
<el-radio-group :disabled="disabled" :value="data.question_answer"> <el-radio-group :disabled="disabled" :value="data.question_answer">
<div class="question-item-option" v-for="item in data.question_options" :key="item.id"> <div class="question-item-option" v-for="item in currentQuestionOptions" :key="item.id">
<el-radio :label="item.id">{{ item.option }}</el-radio> <el-radio :label="item.id">{{ item.abc_option }}</el-radio>
</div> </div>
</el-radio-group> </el-radio-group>
</template> </template>
</div> </div>
<div class="question-item-ft">
<dl>
<dt>正确答案:</dt>
<dd class="is-answer">{{ correctAnswerText }}</dd>
</dl>
<dl>
<dt>试题解析:</dt>
<dd><div v-html="data.question_analysis"></div></dd>
</dl>
</div>
</slot> </slot>
<div class="question-item-ft"></div>
</div> </div>
</div> </div>
</el-card> </el-card>
</template> </template>
<script> <script>
import VEditor from '@/components/tinymce/Index.vue'
export default { export default {
props: { props: {
index: { type: Number, default: 1 }, index: { type: Number, default: 1 },
disabled: { type: Boolean, default: false }, disabled: { type: Boolean, default: false },
data: { type: Object, default: () => ({}) }, data: { type: Object, default: () => ({}) },
disableScore: { type: Boolean, default: false } disableScore: { type: Boolean, default: false },
hasChildren: { type: Boolean, default: false }
}, },
components: { VEditor },
data() { data() {
return { return {
question: {} question: {}
} }
}, },
watch: {
data: {
immediate: true,
handler(data) {
// this.question = this.genQuestion(data)
}
}
},
computed: { computed: {
// 试题类型 // 试题类型
questionType() { questionType() {
...@@ -103,10 +106,27 @@ export default { ...@@ -103,10 +106,27 @@ export default {
questionTypeText() { questionTypeText() {
const map = { 1: '单选题', 2: '多选题', 3: '问答题', 5: '案例题', 6: '判断题', 7: '实操题', 8: '情景题' } const map = { 1: '单选题', 2: '多选题', 3: '问答题', 5: '案例题', 6: '判断题', 7: '实操题', 8: '情景题' }
return map[this.questionType] return map[this.questionType]
},
// 处理后的options数据
currentQuestionOptions() {
if (!this.data.question_options) {
return []
}
return this.data.question_options.map((item, index) => {
// 英文字母 + 名称
item.abc = this.A_Z[index]
item.abc_option = `${this.A_Z[index]}. ${item.option}`
return item
})
},
// 正确答案显示的英文字母
correctAnswerText() {
const result = this.currentQuestionOptions.reduce((result, item) => {
item.checked && result.push(item.abc)
return result
}, [])
return result.join('、')
} }
},
methods: {
genQuestion(data) {}
} }
} }
</script> </script>
...@@ -149,4 +169,19 @@ export default { ...@@ -149,4 +169,19 @@ export default {
.question-item-option { .question-item-option {
margin: 10px 0; margin: 10px 0;
} }
.question-item-ft {
margin-top: 20px;
border-top: 1px solid #ebeef5;
dl {
margin-top: 20px;
display: flex;
}
dd {
flex: 1;
overflow: hidden;
}
.is-answer {
color: var(--main-color);
}
}
</style> </style>
...@@ -49,10 +49,10 @@ export default { ...@@ -49,10 +49,10 @@ export default {
flex-wrap: wrap; flex-wrap: wrap;
li { li {
border-radius: 50px; border-radius: 50px;
width: 24px; width: 30px;
height: 24px; height: 30px;
font-size: 14px; font-size: 14px;
line-height: 150%; line-height: 26px;
text-align: center; text-align: center;
border: 2px solid #ccc; border: 2px solid #ccc;
color: #666; color: #666;
...@@ -64,6 +64,10 @@ export default { ...@@ -64,6 +64,10 @@ export default {
} }
} }
} }
.question-num-bd {
overflow-y: auto;
max-height: calc(100vh - 220px);
}
.question-num-ft { .question-num-ft {
margin-top: 20px; margin-top: 20px;
text-align: center; text-align: center;
......
...@@ -115,6 +115,9 @@ export default { ...@@ -115,6 +115,9 @@ export default {
remote: { remote: {
httpRequest: getAppList, httpRequest: getAppList,
params: { params: {
question_title: '',
question_tag: '',
question_content: '',
question_types: [1, 2, 3, 6], question_types: [1, 2, 3, 6],
permission: this.questionBank, permission: this.questionBank,
project_prefix: this.activeProject.tag, project_prefix: this.activeProject.tag,
......
<template> <template>
<app-card> <app-card>
<div style="margin-bottom:25px;"> <div style="margin-bottom: 25px">
<span style="font-size: 14px;color: #606266;padding-right:12px;">题库范围:</span> <span style="font-size: 14px; color: #606266; padding-right: 12px">题库范围:</span>
<el-radio @change="refetchList" v-model="permission" :label="1">我的题库</el-radio> <el-radio @change="refetchList" v-model="permission" :label="1">我的题库</el-radio>
<el-radio @change="refetchList" v-model="permission" :label="2">公共题库</el-radio> <el-radio @change="refetchList" v-model="permission" :label="2">公共题库</el-radio>
</div> </div>
...@@ -113,6 +113,9 @@ export default { ...@@ -113,6 +113,9 @@ export default {
remote: { remote: {
httpRequest: getAppList, httpRequest: getAppList,
params: { params: {
question_title: '',
question_tag: '',
question_content: '',
permission: this.permission, permission: this.permission,
project_prefix: this.activeProject.tag, project_prefix: this.activeProject.tag,
question_category: '' question_category: ''
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论