|
@@ -0,0 +1,244 @@
|
|
|
+<template>
|
|
|
+ <div style="display: flex;">
|
|
|
+
|
|
|
+ <ul style="width: 180px;">
|
|
|
+ <li class="mt10">
|
|
|
+ <el-button type="primary" @click="type=1" class="w130" > 判断题 {{counter[1]}}题</el-button>
|
|
|
+ </li>
|
|
|
+ <li class="mt10">
|
|
|
+ <el-button type="warning" @click="type=2" class="w130" >单选题 {{counter[2]}}题</el-button>
|
|
|
+ </li>
|
|
|
+ <li class="mt10">
|
|
|
+ <el-button type="success" @click="type=3" class="w130">多选题 {{counter[3]}}题</el-button>
|
|
|
+ </li>
|
|
|
+ <li class="mt10">
|
|
|
+ <el-button type="danger" @click="type=4" class="w130">案例题 {{counter[4]}}题</el-button>
|
|
|
+ </li>
|
|
|
+ </ul>
|
|
|
+
|
|
|
+ <el-card style="width: 750px;min-height: 400px;">
|
|
|
+ <div slot="header" class="clearfix">
|
|
|
+ <span>第{{index+1}}题({{currentQuestion.type|getType}})</span>
|
|
|
+ </div>
|
|
|
+ <div class="q-single">
|
|
|
+ <div class="question">
|
|
|
+ 题目 : <span v-html="currentQuestion.title"></span>
|
|
|
+ </div>
|
|
|
+ <!-- 当选题 -->
|
|
|
+ <div class="answer" v-if="currentQuestion.type<3">
|
|
|
+ <el-radio-group v-model="currentQuestion.answer" @change="selectRadio">
|
|
|
+ <el-radio class="answer-item" v-for="(item,choiceIdx) in currentQuestion.choice" :label="choiceIdx+1" :key="choiceIdx">
|
|
|
+ <span class="answer-title">{{transformChar[choiceIdx]+'、 '+item}}</span>
|
|
|
+ </el-radio>
|
|
|
+ </el-radio-group>
|
|
|
+ <div class="mt10" v-if="finish">
|
|
|
+ <span v-html="getReult(currentQuestion)"></span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <!-- 多选题 -->
|
|
|
+ <div class="answer" v-if="currentQuestion.type==3">
|
|
|
+ <el-checkbox-group v-model="currentQuestion.answer" @change="selectCheckBox">
|
|
|
+ <el-checkbox v-for="(item,choiceIdx) in currentQuestion.choice"
|
|
|
+ :label="choiceIdx+1" :key="choiceIdx" class="answer-item">
|
|
|
+ {{transformChar[choiceIdx]+'、 '+item}}
|
|
|
+ </el-checkbox>
|
|
|
+ </el-checkbox-group>
|
|
|
+
|
|
|
+
|
|
|
+ <div class="mt10 " v-if="finish">
|
|
|
+ <span v-html="getReult(currentQuestion)"></span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <!-- 案例题 -->
|
|
|
+ <div class="answer" v-if="currentQuestion.type==4">
|
|
|
+ <div v-for="(child,cidx) in currentQuestion.child" :key="child.id">
|
|
|
+ {{cidx+1}}[{{child.type|getType}}]: <span v-html="child.title"></span>
|
|
|
+
|
|
|
+ <div class="answer" v-if="child.type==3">
|
|
|
+ <el-checkbox-group v-model="answers['answer'+cidx]" @change="(e)=>{selectCheckBox(e,cidx)}">
|
|
|
+ <el-checkbox v-for="(item,choiceIdx) in child.choice" :label="choiceIdx+1" :key="choiceIdx" class="answer-item">
|
|
|
+ {{transformChar[choiceIdx]+'、'+item}}
|
|
|
+ </el-checkbox>
|
|
|
+ </el-checkbox-group>
|
|
|
+ <div class="mt10" v-if="finish">
|
|
|
+ <span v-html="getReult(child)"></span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div class="answer" v-else>
|
|
|
+ <el-radio-group v-model="answers['answer'+cidx]" @change="(e)=>{selectRadio(e, cidx)}">
|
|
|
+ <el-radio class="answer-item" v-for="(item,choiceIdx) in child.choice" :label="choiceIdx+1" :key="choiceIdx">
|
|
|
+ <span class="answer-title">{{transformChar[choiceIdx]+'、 '+item}}</span>
|
|
|
+ </el-radio>
|
|
|
+ </el-radio-group>
|
|
|
+ <div class="mt10" v-if="finish">
|
|
|
+ <span v-html="getReult(child)"></span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="tc" v-if="!finish">
|
|
|
+ <el-button type="primary" @click="submitQustion">完成</el-button>
|
|
|
+ </div>
|
|
|
+ <div class="tc" v-else>
|
|
|
+ <el-button type="primary" :disabled="index<1" @click="prevQuestion">上一题</el-button>
|
|
|
+ <el-button type="primary" :disabled="index>=counter[type]" @click="nextQuestion">下一题</el-button>
|
|
|
+ </div>
|
|
|
+ </el-card>
|
|
|
+
|
|
|
+
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script>
|
|
|
+ import { httpServer} from "@/components/httpServer/httpServer.js";
|
|
|
+ import { getSelect } from "@/containers/center/exam/components/util.js";
|
|
|
+ export default {
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ index: 0,
|
|
|
+ groupId: 7,
|
|
|
+ id: 0,
|
|
|
+ type: 1,
|
|
|
+ finish: false,
|
|
|
+ transformChar: ["A", "B", "C", "D","E"],
|
|
|
+ currentQuestion: {child:[], choice:[]},
|
|
|
+ answers:{
|
|
|
+ answerlist:[],
|
|
|
+ answer:'',
|
|
|
+ answer0:'',
|
|
|
+ answer1:'',
|
|
|
+ answer2:'',
|
|
|
+ answer3:'',
|
|
|
+ answer4:'',
|
|
|
+ },
|
|
|
+ counter:{
|
|
|
+ 1:200,
|
|
|
+ 2:400,
|
|
|
+ 3:100,
|
|
|
+ 4:30
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ props: ['info', 'extraXs'],
|
|
|
+ mounted() {
|
|
|
+ this.id = this.info.id || 0;
|
|
|
+ this.index = this.extraXs.index1 || 0;
|
|
|
+ this.loadAnswer();
|
|
|
+ },
|
|
|
+ watch: {
|
|
|
+ type() {
|
|
|
+ let index = 'index' + this.type;
|
|
|
+ this.index = 0;
|
|
|
+ this.loadAnswer();
|
|
|
+ }
|
|
|
+ },
|
|
|
+ filters:{
|
|
|
+ getType( val ){
|
|
|
+ const d = {1:'判断题', 2:'单选题', 3:'多选题', 4:'案例题'}
|
|
|
+ return d[val]
|
|
|
+ }
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ submitQustion(){
|
|
|
+ let param = {
|
|
|
+ id: this.id,
|
|
|
+ groupId: this.groupId,
|
|
|
+ type: this.type,
|
|
|
+ index: this.index,
|
|
|
+ }
|
|
|
+ httpServer("course.finishPaperAnswer", param).then(res => {
|
|
|
+ if (res.code != 200) return;
|
|
|
+ let extraKey = 'index'+this.type
|
|
|
+ if( this.index > this.extraXs[extraKey]){
|
|
|
+ this.$emit( "updateExtraXs", {extraKey:this.index})
|
|
|
+ }
|
|
|
+ this.finish = true
|
|
|
+ })
|
|
|
+ },
|
|
|
+ showResult(index){
|
|
|
+ let val = ''+index;
|
|
|
+ val = val.replaceAll('1', 'A').replaceAll('2', 'B').replaceAll('3', 'C').replaceAll('4', 'D').replaceAll('5', 'E');
|
|
|
+ return val.split('').join(',')
|
|
|
+ },
|
|
|
+ getReult(item){
|
|
|
+ let select = getSelect( item.answer);
|
|
|
+ let result = this.showResult( item.result )
|
|
|
+ if( select == item.result){
|
|
|
+ return `正确答案:<span class="show-true">${result}</span>`
|
|
|
+ }else{
|
|
|
+ return `正确答案:<span class="show-false">${result}</span>`
|
|
|
+ }
|
|
|
+ },
|
|
|
+ prevQuestion(){
|
|
|
+ if( this.index <1) return;
|
|
|
+ this.index--
|
|
|
+ this.loadAnswer()
|
|
|
+ },
|
|
|
+ nextQuestion(){
|
|
|
+ this.index++
|
|
|
+ this.loadAnswer()
|
|
|
+ },
|
|
|
+ selectRadio( value, cidx ){
|
|
|
+ if( this.currentQuestion.type == 4 ){
|
|
|
+ this.currentQuestion.child[cidx].answer = value;
|
|
|
+ }
|
|
|
+ this.currentQuestion.answer = value;
|
|
|
+ this.$forceUpdate()
|
|
|
+ },
|
|
|
+ selectCheckBox(value, cidx){
|
|
|
+ if( this.currentQuestion.type == 4 ){
|
|
|
+ this.currentQuestion.child[cidx].answer = value;
|
|
|
+ }
|
|
|
+ this.currentQuestion.answer = value;
|
|
|
+ this.$forceUpdate()
|
|
|
+ },
|
|
|
+ doLoadQuestion( item ){
|
|
|
+ item.choice = [];
|
|
|
+ for( let i=0;i<6;i++){
|
|
|
+ let mkey = "answer"+i
|
|
|
+ if(item[mkey] ) item.choice.push( item[mkey] );
|
|
|
+ }
|
|
|
+ item.answer = [];
|
|
|
+ if( item.type == 4){
|
|
|
+ for ( let i in item.child){
|
|
|
+ let child = item.child[i]
|
|
|
+ child.choice = [];
|
|
|
+ child.answer = [];
|
|
|
+ this.answers['answer'+i] = child.answer;
|
|
|
+ for( let i=0;i<6;i++){
|
|
|
+ let mkey = "answer"+i
|
|
|
+ if(child[mkey] ) child.choice.push( child[mkey] );
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ item.child = []
|
|
|
+ }
|
|
|
+ this.finish = false
|
|
|
+ console.log("ok", item)
|
|
|
+ this.currentQuestion = item
|
|
|
+ },
|
|
|
+ loadAnswer() {
|
|
|
+ let param = {
|
|
|
+ id: this.id,
|
|
|
+ groupId: this.groupId,
|
|
|
+ type: this.type,
|
|
|
+ index: this.index,
|
|
|
+ }
|
|
|
+ httpServer("course.loadPaperAnswer", param).then(res => {
|
|
|
+ if (res.code != 200) return;
|
|
|
+ if( this.index ==0 ) this.index = res.data.index;
|
|
|
+ this.doLoadQuestion( res.data.info || {})
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+</script>
|
|
|
+
|
|
|
+<style lang="css">
|
|
|
+ @import url("../../../../assets/css/exam.css");
|
|
|
+</style>
|