2020-05-26 15:59:11 +08:00
|
|
|
|
<template>
|
|
|
|
|
<div>
|
|
|
|
|
<template v-if="type=='select'">
|
|
|
|
|
<el-radio-group v-model="active" @change="onChange">
|
|
|
|
|
<el-radio v-for="(el,i) in optionList" :key="i" :label="i"> 选项-{{ $asc2chart(65+i) }} </el-radio>
|
|
|
|
|
</el-radio-group>
|
|
|
|
|
</template>
|
|
|
|
|
<template v-if="type=='judge'">
|
|
|
|
|
<el-radio-group v-model="active" @change="onChange">
|
|
|
|
|
<el-radio :label="0"> √ </el-radio>
|
|
|
|
|
<el-radio :label="1"> × </el-radio>
|
|
|
|
|
</el-radio-group>
|
|
|
|
|
</template>
|
2020-10-20 16:48:28 +08:00
|
|
|
|
<template v-if="type=='multi'">
|
|
|
|
|
<el-checkbox-group v-model="activeList" @change="onChange">
|
|
|
|
|
<el-checkbox v-for="(el,i) in optionList" :key="i" :label="i"> 选项-{{ $asc2chart(65+i) }} </el-checkbox>
|
|
|
|
|
</el-checkbox-group>
|
|
|
|
|
</template>
|
|
|
|
|
<template v-if="type==='fill'">
|
2020-12-04 15:46:45 +08:00
|
|
|
|
<div v-for="(el, i) in answerList" :key="i" class="fillType">
|
|
|
|
|
<div class="fillTypeName">{{ `第${i + 1}空` }}</div>
|
2020-10-27 10:43:55 +08:00
|
|
|
|
<el-input
|
|
|
|
|
v-model="answerList[i]"
|
2020-12-04 15:46:45 +08:00
|
|
|
|
class="fillTypeInput"
|
2020-10-27 10:43:55 +08:00
|
|
|
|
type="textarea"
|
|
|
|
|
:autosize="{ minRows: 1, maxRows: 4}"
|
|
|
|
|
placeholder="请输入答案"
|
|
|
|
|
@change="onChange"
|
|
|
|
|
/>
|
2020-12-04 15:46:45 +08:00
|
|
|
|
<div class="fillTypeBtn">
|
|
|
|
|
<el-button v-if="i>0" class="item__button" type="danger" size="mini" icon="el-icon-delete" circle @click="doRemove(i)" />
|
|
|
|
|
</div>
|
2020-10-20 16:48:28 +08:00
|
|
|
|
</div>
|
|
|
|
|
<el-button class="item__button" type="primary" size="mini" icon="el-icon-plus" @click="doAppend" />
|
|
|
|
|
</template>
|
|
|
|
|
<template v-if="type==='answer'">
|
|
|
|
|
<el-input
|
|
|
|
|
v-model="answer"
|
|
|
|
|
type="textarea"
|
|
|
|
|
:autosize="{ minRows: 2, maxRows: 4}"
|
|
|
|
|
placeholder="请输入答案"
|
|
|
|
|
@change="onChange"
|
|
|
|
|
/>
|
|
|
|
|
</template>
|
2020-05-26 15:59:11 +08:00
|
|
|
|
</div>
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<script>
|
|
|
|
|
export default {
|
|
|
|
|
props: {
|
|
|
|
|
optionList: {
|
|
|
|
|
type: Array,
|
|
|
|
|
required: true
|
|
|
|
|
},
|
|
|
|
|
type: {
|
|
|
|
|
type: String,
|
|
|
|
|
required: true
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
data() {
|
|
|
|
|
return {
|
2020-10-20 16:48:28 +08:00
|
|
|
|
active: 0,
|
|
|
|
|
activeList: [],
|
|
|
|
|
answer: '',
|
2020-10-27 10:43:55 +08:00
|
|
|
|
answerList: ['']
|
2020-05-26 15:59:11 +08:00
|
|
|
|
};
|
|
|
|
|
},
|
|
|
|
|
watch: {
|
2020-10-27 10:43:55 +08:00
|
|
|
|
optionList: {
|
|
|
|
|
deep:true,
|
|
|
|
|
handler:function(newV, oldV) {
|
|
|
|
|
if (this.type === 'judge' || this.type === 'select') {
|
|
|
|
|
this.active = this.optionList.findIndex(ele => ele.correct);
|
|
|
|
|
} else if (this.type === 'multi') {
|
|
|
|
|
this.activeList = [];
|
|
|
|
|
this.optionList.forEach((el, i) => {
|
|
|
|
|
if (el.correct) {
|
|
|
|
|
this.activeList.push(i);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
} else if (this.type === 'fill') {
|
|
|
|
|
this.answerList = [];
|
|
|
|
|
this.optionList.forEach(el => {
|
|
|
|
|
this.answerList.push(el.content);
|
|
|
|
|
});
|
|
|
|
|
} else if (this.type === 'answer') {
|
|
|
|
|
this.answer = (this.optionList[0] || {content: ''}).content;
|
|
|
|
|
}
|
2020-10-20 16:48:28 +08:00
|
|
|
|
}
|
2020-05-26 15:59:11 +08:00
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
methods: {
|
|
|
|
|
onChange(e) {
|
2020-10-27 10:43:55 +08:00
|
|
|
|
if (this.type === 'fill') {
|
|
|
|
|
this.$emit('change', this.answerList);
|
|
|
|
|
} else {
|
|
|
|
|
this.$emit('change', e);
|
|
|
|
|
}
|
2020-10-20 16:48:28 +08:00
|
|
|
|
},
|
|
|
|
|
doAppend() {
|
2020-10-27 10:43:55 +08:00
|
|
|
|
this.answerList.push('');
|
2020-10-20 16:48:28 +08:00
|
|
|
|
},
|
|
|
|
|
doModify(el) {
|
|
|
|
|
this.$emit('modify', {model: el, prop: 'value'});
|
|
|
|
|
},
|
|
|
|
|
doRemove(index) {
|
|
|
|
|
this.answerList.splice(index, 1);
|
2020-05-26 15:59:11 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
<style lang="scss" scoped>
|
2020-12-04 15:46:45 +08:00
|
|
|
|
.fillType{
|
|
|
|
|
margin-bottom:10px;display:flex;
|
|
|
|
|
}
|
|
|
|
|
.fillTypeName{
|
|
|
|
|
margin-right: 10px;height:33px; line-height:33px;
|
|
|
|
|
}
|
|
|
|
|
.fillTypeInput{
|
|
|
|
|
flex:1;
|
|
|
|
|
}
|
|
|
|
|
.fillTypeBtn{
|
|
|
|
|
margin-left: 10px;width: 33px;height:33px;
|
|
|
|
|
button{
|
|
|
|
|
vertical-align: top;
|
|
|
|
|
margin-top:2px;
|
|
|
|
|
}
|
|
|
|
|
}
|
2020-05-26 15:59:11 +08:00
|
|
|
|
</style>
|