layui考试试卷的组装

后台

	@RequestMapping("/examinPaper/showExamInfo")
	public String startExam(ModelMap model,String examinPaperId)
	{
		List<ExaminQuestionDto> examinQuestionList =  examinPaperService.makeExaminQuestion(examinPaperId);
		ExaminPaper examinPaper = examinPaperService.getExaminPaperById(examinPaperId);
		model.addAttribute("examinPaper", examinPaper);
		model.addAttribute("examinQuestionList", examinQuestionList);
		return "studyContest/showExamInfo";
	}

	/**
	 * Map<题目ID,题目选项>
	 * @param questionItemList
	 */
	private Map<String,List<QuestionItem>> getQuestionItemMap(List<QuestionDto> questionItemList)
	{
		Map<String,List<QuestionItem>> questionMap = new HashMap<String,List<QuestionItem>>(1);
		//选项list
		List<QuestionItem> itemList = null;
		for (QuestionDto dto : questionItemList) 
		{
			QuestionItem item = new QuestionItem();
			item.setQuestionItemId(dto.getQuestionItemId());
			item.setItemSerial(dto.getItemSerial());
			item.setItemContent(dto.getItemContent());
			item.setItemOrder(dto.getItemOrder());
			if(questionMap.containsKey(dto.getQuestionMgtId()))
			{
				itemList = questionMap.get(dto.getQuestionMgtId());
				itemList.add(item);
			}
			else
			{
				itemList = new ArrayList<QuestionItem>(1);
				itemList.add(item);
				questionMap.put(dto.getQuestionMgtId(), itemList);
			}
		}
		return questionMap;
	}


	/**
	 * 组装试卷
	 * @param examinPaperId
	 */
	public List<ExaminQuestionDto> makeExaminQuestion(String examinPaperId)
	{
		Map<String,Object> param = new HashMap<String,Object>(1);
		param.put("flag", 0);//不带is_right条件
		param.put("examinPaperId", examinPaperId);
		//包含题目与选项
		List<QuestionDto> questionItemList = examinPaperMapper.getExaminQuestionItemList(param);
		if(CollectionUtils.isEmpty(questionItemList))
		{
			return null;
		}
		Map<String,List<QuestionItem>> questionItemMap = getQuestionItemMap(questionItemList);
		List<ExaminQuestionDto> examinQuestionList = new ArrayList<ExaminQuestionDto>(1);
		ExaminQuestionDto examinQuestion = null;
		for(Map.Entry<String,List<QuestionItem> > entry:questionItemMap.entrySet())
		{  
			for (QuestionDto dto : questionItemList)
			{
				if(entry.getKey().equals(dto.getQuestionMgtId()))
				{
					examinQuestion = new ExaminQuestionDto();
					examinQuestion.setQuestionMgtId(dto.getQuestionMgtId());
					examinQuestion.setQuestionName(dto.getQuestionName());
					examinQuestion.setQuestionType(dto.getQuestionType());
					examinQuestion.setQuestionTypeName(dto.getQuestionTypeName());
					examinQuestion.setQuestionAnwser(dto.getQuestionAnwser());
					List<QuestionItem> itemList = entry.getValue();
					examinQuestion.setItemList(itemList);
					examinQuestionList.add(examinQuestion);
					break;
				}
			}
		}  
		
		return examinQuestionList;
	}


	/**
	 * 根据id查询试卷详情
	 * @param examinPaperId
	 */
	public ExaminPaper getExaminPaperById(String examinPaperId)
	{
		/*ExaminPaper examinPaper = ;
		if(examinPaper != null && StringUtil.isNotEmpty(examinPaper.getJoinPersonsIds())) {
			StringBuffer joinMember = new StringBuffer();
			for (String partyMemberId : examinPaper.getJoinPersonsIds().split(",")) {
				PartyMember partyMember = partyMemberMapper.getPartyMember(partyMemberId);
				if(partyMember != null ) {
					joinMember.append(","+partyMember.getName());
				}
			}
			String joinMembers = joinMember.toString().replaceFirst(",", "");
			examinPaper.setJoinPersonsNames(joinMembers);
		}
		*/
		ExaminPaper examinPaper = examinPaperMapper.getExaminPaperById(examinPaperId);
		if (StringUtils.isNotEmpty(examinPaper.getJoinPersonsIds())) {
			String[] ids = examinPaper.getJoinPersonsIds().split(",");
			List<String> joinPersonsNames=examinPaperMapper.findJoinPersonsNames(ids);
			for(int i=0;i<joinPersonsNames.size();i++) {
				System.out.println("====================="+joinPersonsNames.get(i));
			}
			if (CollectionUtils.isNotEmpty(joinPersonsNames)) {
				examinPaper.setJoinPersonsNames(StringUtils.strip(joinPersonsNames.toString(),"[]"));
			}
			System.out.println("----------------"+examinPaper.getJoinPersonsNames());
		}
		return examinPaper;
	}

考试页面

<!DOCTYPE html>
<html>
<head>
<#include "/common/header.html"/>
<meta charset="utf-8">
<title>考试答题</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<style type="text/css">
.exam{ padding: 0 20px; }
.exam_tit{
    height: 40px;
    overflow: hidden;
    line-height: 40px;
    vertical-align: middle;
    text-align: center;
    font-size: 18px;
    color: #333333;
    font-weight: bold;
}
.exam_info{
    height: 30px;
    overflow: hidden;
    line-height: 30px;
    vertical-align: middle;
    font-size: 14px;
    color: #333333;
    border-bottom: 1px #999999 solid;
    margin-bottom: 15px;
}
.exam_info p{
    display: inline-block;
}
.exam_info p:first-child span{
    margin-right: 30px;
}
.exam_info p:first-child{
    float: left;
}
.exam_info p:last-child{
    float: right;
}
.exam_question{
    line-height: 30px;
    font-size: 13px;
    color: #000000;
    font-weight: bold;
}
.exam_block{ 
    padding-left: 20px;
    font-size: 12px;
    color: #000000;
}
.exam_block .layui-form-radio span{
    font-size: 12px;
    color: #000000;
}
.exam_checkbox p{
    height: 29px;
    padding-left: 2px;
}
.exam_checkbox .layui-form-checkbox[lay-skin=primary] span {
    color: #000000;}
.exam_sub{
    border-top: 1px #999999 solid;
    margin-top: 20px;
    padding-top: 10px;
    text-align: center;
    padding-bottom: 20px;
}
.exam_grade{
  height: auto;
  overflow: hidden;
  padding-top: 10px;
}
.exam_grade p{
  line-height: 26px;
  font-size: 13px;
  color: #000000;
  text-align: center;
}
.exam_grade p:last-child{
  font-size: 12px;
  color: #666666;
  line-height: 20px;
}
.exam_grade p.on{
  font-size: 16px;
  color: #000000;
  font-weight: bold;
  line-height: 30px;
}
h1 {
    font-family:"微软雅黑";
    font-size:40px;
    margin:20px 0;
    border-bottom:solid 1px #ccc;
    padding-bottom:20px;
    letter-spacing:2px;
}

</style>
</head>
<body>
<div class="system_wrap exam">
   <div class="exam_tit">${examinPaper.paperName}</div>
   <div class="exam_info">
     <p>
       <b>考试编号:</b>
       <span>NO.23564</span>
       <b>答题人:</b>
       <span>${current_login_user.userName}</span>
       <b class="score" style="display:none">得分:</b>
       <span class="score" id="scoreValue" style="display:none"></span>
     </p>
     <p>
       <b>
       <button class="layui-btn layui-btn-normal" id="startExam" onclick="startExam()">开始考试</button>
       </b>
       <b>考试时间:</b>
       <span>
       <input type="hidden" id="examinDuration" value="${examinPaper.examinDuration}"/>
       <strong id="hour_show">0时</strong>
       <strong id="minute_show">0分</strong>
       <strong id="second_show">0秒</strong></span>
       </p>
   </div>
   <div class="exam_con layui-form">
     <form id="examinPaperForm" class="layui-form">
     <#if examinQuestionList?? && (examinQuestionList?size > 0) >
     <#list examinQuestionList as question>
     <div class="layui-form-item">
        <div class="exam_question">
        ${question_index+1}、(${question.questionTypeName!''}) ${question.questionName!''}  
        <strong class="layui-bg-red" style="display:none">正确答案:${question.questionAnwser!''}</strong>
        </div>
        <input type="hidden" value="${question.questionMgtId}">
        <div class="exam_block">
          <#if question.itemList?? && (question.itemList?size>0)>
          <#list question.itemList?sort_by ("itemOrder") as item>
          <p><input type="radio" name="${question.questionMgtId!''}" value="${item.itemSerial!''}" title="${item.itemSerial!''}、${item.itemContent!''}"/></p>
          </#list>
          </#if>
          </div>
       </div>
       </#list>
       </#if>
     <div class="layui-form-item exam_sub" id="submitExam" style="visibility:hidden">
        <button class="layui-btn layui-btn-big" lay-submit="" lay-filter="submitExam" >交卷</button>
     </div>
     </form>
   </div>
   <div>
    <input type="hidden" id="examinPaperId" name="examinPaperId" value="${examinPaper.examinPaperId!''}">
    <#if examinQuestionList??>
   	<input type="hidden" id="questionNum" name="questionNum" value="${examinQuestionList?size}">
   	</#if>
   </div>
</div>
<script type="text/javascript" src="${rc.contextPath}/studyContest/js/examinPaper.js" charset="utf-8"></script>
</body>
</html>

js

var useTime = 0;
var questionNum = parseInt($("#questionNum").val());
layui.use(['element','form','layer'], function(){
  var element = layui.element;
  var form = layui.form
  ,layer = layui.layer;
  
  var submitNum = 0;
  //单选监听及过滤事件
  form.on('radio', function(data){
    submitNum += 1;
 });
  form.on('submit(submitExam)',function(data){
	  var a = JSON.stringify(data.field);
	  layer.confirm('您确定要提交试卷吗?', {
		  btn: ['确定','取消'] //按钮
		}, function(){
		  var questionNum = parseInt($("#questionNum").val());
		  if(questionNum!=submitNum){
			  layer.msg('您还有题目没有作答,请再检查一下', {icon: 2});
			  return false;
		  }
		  var questionItem = data.field;//题目选项:题目答案
		  var examinPaperId = $("#examinPaperId").val();
		  var params = {
				  "examinPaperId":examinPaperId,
				  "questionScore":JSON.stringify(questionItem),
				  "finishExaminDuration":useTime
		  }
		  var url = CONTEXT_PATH + '/examinPaper/saveExaminScore';
		  var retData = $.getData(url, params);
		  if(retData.status ==1000 || retData.status == WebConst.SUCCESS){
			    layer.msg('提交成功', {icon: 1});
			    $("#submitExam").hide();
			    $("#startExam").text("考试结束");
			    $("strong.layui-bg-red").attr("style","display:''")
			    $(".score").attr("style","display:''");
			    $("#scoreValue").text(retData.data);
				return false;
		   }
		}, function(){
		  layer.msg('再检查一下', {icon: 2});
		  return false;
		});
	  return false;
  });
  // 弹层
  var layer = layui.layer;
});

var sumTime = $("#examinDuration").val();
var intDiff =sumTime * 60 ;//倒计时总秒数量
var timeFlag = true;
var beginExaminTime = "";
//倒计时
function timer(intDiff){
    window.setInterval(function(){
    var day=0,
        hour=0,
        minute=0,
        second=0;//时间默认值        
    if(intDiff > 0){
        day = Math.floor(intDiff / (60 * 60 * 24));
        hour = Math.floor(intDiff / (60 * 60)) - (day * 24);
        minute = Math.floor(intDiff / 60) - (day * 24 * 60) - (hour * 60);
        second = Math.floor(intDiff) - (day * 24 * 60 * 60) - (hour * 60 * 60) - (minute * 60);
    }
    if (minute <= 9) minute = '0' + minute;
    if (second <= 9) second = '0' + second;
    $('#day_show').html(day+"天");
    $('#hour_show').html('<s id="h"></s>'+hour+'时');
    $('#minute_show').html('<s></s>'+minute+'分');
    $('#second_show').html('<s></s>'+second+'秒');
    intDiff--;
    useTime++;
    }, 1000);
} 
function startExam(){
	beginExaminTime = getNowFormatDate();
	if(timeFlag){
		 timer(intDiff);
	}
	$("#submitExam").attr("style","visibility:visible");
	$("#startExam").text("正在考试");
}
//计算当前时间
function getNowFormatDate() {
    var date = new Date();
    var seperator1 = "-";
    var seperator2 = ":";
    var month = date.getMonth() + 1;
    var strDate = date.getDate();
    if (month >= 1 && month <= 9) {
        month = "0" + month;
    }
    if (strDate >= 0 && strDate <= 9) {
        strDate = "0" + strDate;
    }
    var currentdate = date.getFullYear() + seperator1 + month + seperator1 + strDate
            + " " + date.getHours() + seperator2 + date.getMinutes()
            + seperator2 + date.getSeconds();
    return currentdate;
}

$(function(){
	$(document).bind("keydown", function(e) {
		 e = window.event || e;//解决浏览器兼容的问题   
		 if(e.keyCode == 116) {//F5按下
			 e.keyCode = 0;
			 return false;
		 }
	});
}); 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Spring Boot和Layui是两个独立的开源项目,分别是Java开发框架和前端UI框架。 Spring Boot是一个简化开发的框架,它基于Spring框架,提供了一套开发规范和开箱即用的功能,方便开发者快速搭建Java Web应用程序。它通过自动配置和优雅的编码方式,减少了开发者的配置工作和开发时间,提高了开发效率。Spring Boot还内置了多个常用的功能模块,如web开发、数据库访问、消息队列等,方便开发者快速集成和使用。 Layui是一个轻量级的前端UI框架,它提供了一套简洁、易用的前端组件和样式,方便开发者快速构建页面。Layui的特点是简单、灵活、易于上手,适合快速开发中小型项目。它提供了各种常用的UI组件,如表单、表格、弹窗、菜单等,可以满足多种业务需求,并且还提供了丰富的扩展性,可以自定义样式和功能。 将Spring Boot和Layui结合起来进行在线考试的开发,可以通过Spring Boot提供的后端功能实现用户管理、考试试题管理、考生答题记录管理等功能,同时可以利用Layui提供的前端组件和样式,进行页面的设计和交互。通过Spring Boot提供的RESTful接口与Layui的前端页面进行交互,实现用户注册、登录、考试、批改答案等功能。同时可以根据需求进行二次开发和定制,满足特定的业务需求。 综上所述,使用Spring Boot和Layui进行在线考试的开发,可以快速高效地实现用户管理、试题管理、考试管理等功能,并且可以通过Layui提供的前端组件进行页面的设计和交互,使用户体验更加友好。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wespten

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值