今天实现检查答题功能做了一天了,效果如下:
在这里插入图片描述
在这里插入图片描述
我就不贴代码了,代码太长贴了也看不明白,讲下思路和关键代码就好,

<el-radio-group v-if="!isCheck" v-model=item.value style="width:100%" @change="selectSing">
	<el-radio :disabled="disable"
           v-for="(items, indexs) in item.itemObj.AnswerList"
           :label="items"
            style="margin-bottom:10px"
             :key="indexs+''">
   		  {{answer[indexs++]}}.{{items.Answer}}
	</el-radio>
</el-radio-group>
 <span v-else v-for="(items, indexs) in item.itemObj.AnswerList"
                    style="margin:10px 20px;"
                    :class="getClass(items.Answer,item.value!=''?item.value.Answer:'',item.itemObj.AnswerList)"
                    :key="indexs+''">
   		{{answer[indexs++]}}.{{items.Answer}}
</span>

这一段用来替换效果图中提交问卷后的显示效果(不能用radio和checkbox标签的readonly或disable,readonly无效,disable会占用样式,导致后面显示题目解析时没有效果),用span代替radio和checkbox显示

接下来就是判断然后给样式了,先写好不同的样式

 .color-warning{
    color: #aa6e3a;
  }
  .color-red{
    color: red !important;
  }

  .color-green{
    color:green !important;
  }

然后写逻辑判断的方法,用样式绑定给绑定上去。

我这里是在data里面给一个变量写了个匿名函数,getClass


        	  getClass:function(thisValue,selectList,realList){//当前值,选择的值列表(兼容多选),正确值列表(兼容多选)
              let realValueList=[];
        	    for (let i=0;i<realList.length;i++) {
        	      if (realList[i].IsTrue) {realValueList.push(realList[i].Answer)}
              }
        	    //是否选择
        	    let isSelect=false;
        	    if (typeof(selectList)=='object'){//多选
                for (let i=0;i<selectList.length;i++){
                  if (selectList[i].Answer==thisValue) {
                    isSelect=true;
                    break;
                  }
                }
              } else {//单选
        	      if (selectList==thisValue){isSelect=true;}
              }
        	    //是否正确
        	    let isReal=false;
        	    for (let i=0;i<realValueList.length;i++) {
                if(thisValue==realValueList[i]){
                  isReal=true;
                  break;
                }
              }
              debugger
              if (isSelect) {
                return isReal?"color-green":"color-red";
              }else{
                let hasTrue=false;
                  for (let j=0;j<selectList.length;j++){
                    for (let k=0;k<realList.length;k++){
                      if(selectList[j].Answer==realList[k].Answer&&realList[k].IsTrue&&selectList[j].Answer!=thisValue){
                        hasTrue=true;
                        break;
                      }
                    }
                  }
                  for (let i=0;i<realList.length;i++) {//确定漏选的
                  if(realList[i].Answer==thisValue&&realList[i].IsTrue==true&&hasTrue){
                    return "color-warning";
                  }
                }
                return isReal?"color-green":"";
              }
            },

写完之后在需要显示的地方做个样式绑定调用就可以返回不同的类,从而达到不同的效果

 :class="getClass(items.Answer,item.value!=''?item.value.Answer:'',item.itemObj.AnswerList)"

完成!写完下班

Logo

前往低代码交流专区

更多推荐