试卷评分功能

 

    <ul class="detail">
          <p style="font-size:17px;font-weight:200;">试卷:</p>
          <li v-for="(item,index) in list" :key="item">
            <div style="height:40px;">
              <p style="width:80%;display:inline-block;">
                <span v-text="index+1+'.'">1.</span>
                <span v-text="item.question" style="margin-right:10px;">题目1</span>
                <span v-text="'[分值:'+item.bankScore+']'" style="color:#999999;"></span>
              </p>
              <div
                v-if="item.type===5||item.type===4"
                style="float:right;margin-top:5px;margin-right:10px;"
              >
                <el-select
                  v-model="item.score"
                  placeholder="分数"
                  style="width:100px;"
                  @change="getTotalScore ()"
                >
                  <el-option
                    v-for="item in selectList[index]"
                    :key="item.value"
                    :label="item.label"
                    :value="item.value"
                  ></el-option>
                </el-select>
              </div>
            </div>

            <p style="line-height:25px;">
              您的回答:
              <span
                v-text="optionAnswer(item,0)"
                style="padding-right:10px;"
                v-if="item.type===1||item.type===2"
              >答案</span>
              <span
                v-text="judgeText(item,item.answer)"
                style="padding-right:10px;"
                v-else-if="item.type===3"
              >答案</span>
              <span v-text="item.answer" style="padding-right:10px;" v-else>答案</span>
              <span v-if="item.type!==4&&item.type!==5">
                <span v-if="item.answer===item.correctAnswer">
                  <i class="el-icon-check right"></i>
                  <span v-text="'(得分:'+item.bankScore+')'" style="color:#17b3a4;margin-left:5px;"></span>
                </span>
                <span v-else>
                  <i class="el-icon-close wrong"></i>
                  <span style="color:red;margin-left:5px;">(得分:0)</span>
                </span>
              </span>
              <span v-else>
                <span v-text="'(得分:'+item.score+')'" style="color:#17b3a4;margin-left:5px;"></span>
              </span>
            </p>
            <p v-if="item.type!==5&&!(item.answer===item.correctAnswer)">
              <span class="right" style="font-size:16px;">正确答案为:</span>
              <span v-if="item.type===3" v-text="judgeText(item,item.correctAnswer)"></span>
              <span v-else-if="item.type===4" v-text="item.correctAnswer"></span>
              <span v-else-if="item.type===1||item.type===2" v-text="optionAnswer(item,1)"></span>
            </p>
          </li>
        </ul>

循环题目列表分数,累加得出总分 

 // 获取总得分
    getTotalScore () {
      this.totalScore = 0
      this.list.forEach((element, index) => {
        if (element.type !== 5 && element.answer === element.correctAnswer) {
          this.totalScore += element.bankScore
        } else {
          this.totalScore += element.score
        }
      })
    }

 根据单选题/多选题选项返回结果,flag=0:个人答案  flag=1:正确答案

// 返回单选多选题的显示格式
    optionAnswer (obj, flag) {
      let options = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N']
      let str = ''
      let result = ''

      if (flag === 0) {
        str = obj.answer
      } else {
        str = obj.correctAnswer
      }
      if (str.indexOf(',') !== 1) {
        for (let index = 0; index < options.length; index++) {
          if (str === options[index]) {
            result = options[index] + '、' + obj.optionalList[index].option
          }
        }
      } else {
        let listIndex = str.split(',')
        for (let index1 = 0; index1 < listIndex.length; index1++) {
          for (let index2 = 0; index2 < options.length; index2++) {
            if (listIndex[index1] === options[index2]) {
              result +=
                options[index2] + '、' + obj.optionalList[index2].option + ';'
            }
          }
        }
      }
      return result
    }

 返回判断题显示格式

// 返回判断显示格式
    judgeText (item, param) {
      let result = ''
      item.optionalList.forEach((element, index) => {
        if (element.optionNo === param) {
          result = param + ':' + element.option
        }
      })
      return result
    }

 设置填空题、简答题各题评分分数范围

 // 题目评分分数列表
    setSelectList () {
      this.selectList = Array(this.list.length).fill('')
      this.list.forEach((element, index) => {
        this.selectList[index] = Array(element.bankScore)
        this.selectList[index] = []
        for (let i = 0; i <= element.bankScore; i++) {
          let obj = {}
          obj.label = i
          obj.value = i
          this.selectList[index].push(obj)
        }
      })
    }

猜你喜欢

转载自blog.csdn.net/LinBM123/article/details/102821858