学生测验界面

This commit is contained in:
cxt 2015-11-19 17:18:58 +08:00
parent cf4717278f
commit 2c1b03079b
16 changed files with 230 additions and 88 deletions

View File

@ -22,6 +22,7 @@ class ExerciseController < ApplicationController
def show
@exercise = Exercise.find params[:id]
@is_teacher = User.current.allowed_to?(:as_teacher,@course) || User.current.admin?
if @exercise.exercise_status != 2 && (!User.current.allowed_to?(:as_teacher,@course) || User.current.admin?)
render_403
return

View File

@ -17,7 +17,7 @@
<input type="text" name="exercise[end_time]" id="exercise_end_time" placeholder="截止时间" class="InputBox fl W120 calendar_input" readonly="readonly" value="<%= Time.parse(format_time(exercise.end_time)).strftime("%Y-%m-%d") if exercise.end_time %>" >
<%= calendar_for('exercise_end_time')%>
</div>
<div class="fl ml10 f14 fontGrey2"><span class="mr5">考试时长:</span><input name="exercise[time]" id="exercise_time" type="text" class="examTime mr5" value="<%=exercise.time %>" />分钟</div>
<div class="fl ml10 f14 fontGrey2"><span class="mr5">测验时长:</span><input name="exercise[time]" id="exercise_time" type="text" class="examTime mr5" value="<%=exercise.time %>" />分钟</div>
<div class="cl"></div>
<textarea class="testDes mt10" name="exercise[exercise_description]" id="exercise_description" placeholder="发布须知:试题类型有选择和填空两种,其中选择题包括单选题和多选题。您可以在此处填写测验相关说明。" ><%=exercise.exercise_description %></textarea>
<div class="ur_editor_footer" style="padding-top: 10px;">

View File

@ -9,7 +9,7 @@
"<li class='ur_item'>" +
"<label>候选答案<span class='ur_index'></span>&nbsp;&nbsp;&nbsp;</label>" +
"<input name='exercise_choice[<%=index %>]' placeholder='请输入候选答案' type='text' value='<%=exercise_choice.answer_text %>'/>" +
"<a class='icon_add' title='向下插入选项' onclick='add_single_answer($(this));'></a>" +
"<a class='icon_add' title='向下插入选项' onclick='add_candidate_answer($(this));'></a>" +
"<a class='icon_remove' title='删除' onclick='remove_single_answer($(this))'></a>" +
"</li>" +
"<div class='cl'></div>" +
@ -35,7 +35,7 @@
<li class="ur_item">
<label>候选答案<span class="ur_index"></span>&nbsp;&nbsp;&nbsp;</label>
<input name="exercise_choice[<%=index %>]" placeholder="请输入候选答案" type="text" value="<%=exercise_choice.answer_text %>"/>
<a class="icon_add" title="向下插入选项" onclick="add_single_answer($(this));"></a>
<a class="icon_add" title="向下插入选项" onclick="add_candidate_answer($(this));"></a>
<a class="icon_remove" title="删除" onclick="remove_single_answer($(this));"></a>
</li>
<div class="cl"></div>

View File

@ -39,27 +39,4 @@
</div>
</div>
<% end %>
</div>
<%# exercise.exercise_questions.each do |exercise_question|%>
<!-- <div id="poll_questions_<%#= exercise_question.id%>">
<div id="show_poll_questions_<%#= exercise_question.id %>">
<%# if exercise_question.question_type == 1%>
<%#= render :partial => 'show_MC', :locals => {:exercise_question => exercise_question} %>
<%# elsif exercise_question.question_type == 2%>
<%#= render :partial => 'show_MCQ', :locals => {:exercise_question => exercise_question} %>
<%# elsif exercise_question.question_type == 3%>
<%#= render :partial => 'show_single', :locals => {:exercise_question => exercise_question} %>
<%# end%>
</div>
<div id="edit_poll_questions_<%#= exercise_question.id %>" style="display: none;">
<%# if exercise_question.question_type == 1%>
<%#= render :partial => 'edit_MC', :locals => {:exercise_question => exercise_question} %>
<%# elsif exercise_question.question_type == 2%>
<%#= render :partial => 'edit_MCQ', :locals => {:exercise_question => exercise_question} %>
<%# elsif exercise_question.question_type == 3%>
<%#= render :partial => 'edit_single', :locals => {:exercise_question => exercise_question} %>
<%# end%>
</div>
</div>-->
<%# end %>
</div>

View File

@ -134,6 +134,12 @@
"<a class='icon_add' title='向下插入选项' onclick='add_single_answer($(this));'></a><a class='icon_remove' title='删除' onclick='remove_single_answer($(this))'></a>"+
"</li><div class='cl'></div>");
}
function add_candidate_answer(doc)
{
doc.parent().after("<li class='ur_item'><label>候选答案<span class='ur_index'></span>&nbsp;&nbsp;&nbsp;</label><input maxlength='200' type='text' name='exercise_choice["+new Date().getTime()+"]' placeholder='请输入候选答案(选填)'/>" +
"<a class='icon_add' title='向下插入选项' onclick='add_candidate_answer($(this));'></a><a class='icon_remove' title='删除' onclick='remove_single_answer($(this))'></a>"+
"</li><div class='cl'></div>");
}
function remove_single_answer(doc)
{
if(doc.parent().siblings("li").length == 0)
@ -145,32 +151,6 @@
doc.parent().remove();
}
}
function poll_submit()
{
var head_form = $("form.edit_exercise");
var question_form = $("form.new_exercise_question");
<% current_score = get_current_score @exercise %>
var score = <%=current_score %>;
if(head_form.length > 0){
alert("请先保存测验标题及测验基本信息。");
} else if(question_form.length > 0) {
alert("请先保存正在编辑的题目。");
} else if( score < 100) {
alert("");
}
else{
$('#ajax-modal').html('<%#= escape_javascript(render :partial => 'poll_submit', locals: { :poll => @exercise,:is_remote => false}) %>');
showModal('ajax-modal', '310px');
$('#ajax-modal').css('height','120px');
$('#ajax-modal').siblings().remove();
$('#ajax-modal').before("<span style='float: right;cursor:pointer;'>" +
"<a href='javascript:' onclick='clickCanel();'><img src='/images/bid/close.png' width='26px' height='26px' /></a></span>");
$('#ajax-modal').parent().removeClass("alert_praise");
$('#ajax-modal').parent().css("top","").css("left","");
$('#ajax-modal').parent().addClass("popbox_polls");
}
}
</script>
<div class="homepageRight mt0 ml10">
<div class="resources">
@ -196,11 +176,8 @@
<div id="new_poll_question">
</div>
<div class="ur_buttons"> <a class="ur_button_submit" onclick="poll_submit();"> 提交 </a>
<div class="polls_cha">
<input name="exercise[show_result]" value="" type="checkbox">
<label for="">允许学生查看测验结果</label>
</div>
<div id="exercise_submit">
<%= render :partial => 'exercise_submit', :locals => {:exercise => @exercise} %>
</div>
<div class="cl"></div>
<!--contentbox end-->

View File

@ -0,0 +1,127 @@
<script type="text/javascript">
$(function(){
$("#RSide").removeAttr("id");
$("#homework_page_right").css("min-height",$("#LSide").height()-30);
$("#Container").css("width","1000px");
});
function click_<%= pa.id %>(obj)
{
$.ajax({
type: "post",
url: "<%= commit_answer_poll_path(@poll) %>",
data: {
poll_answer_id: <%= pa.id %>,
poll_question_id: <%= pq.id %>
},
success: function (data) {
var dataObj = eval(data);
obj.checked = true;
var span = $('#percent');
span.html(dataObj.percent);
}
});
}
function student_submit_exercise(){
}
</script>
<div class="homepageRight mt0 ml10">
<div class="resources">
<div class="testStatus"><!--头部显示 start-->
<h1 class="ur_page_title" id="polls_name_h"><%= exercise.exercise_name%></h1>
<div class="fontGrey2"><span class="mr130">开始时间:<%=format_time(exercise_student.start_at.to_s) %></span><span class="mr130">测验时长:<%=exercise.time %>分钟</span>
<div class="fr"><span>剩余时长:<span class="c_red">1</span>&nbsp;小时&nbsp;<span class="c_red">30</span>&nbsp;分钟&nbsp;<span class="c_red">0</span>&nbsp;秒</span></div>
</div>
<div class="testDesEdit mt5"><%= exercise.exercise_description.nil? ? "" : exercise.exercise_description.html_safe%></div>
<div class="cl"></div>
<div class="cl"></div>
</div>
<% mc_question_list = exercise_questions.where("question_type=1") %>
<% mcq_question_list = exercise_questions.where("question_type=2") %>
<% single_question_list = exercise_questions.where("question_type=3") %>
<div class="testStatus" id="mc_question_list" style="display: <%=mc_question_list.count > 0 ? "" : "none" %>">
<h3 class="fontGrey3">单选题</h3>
<% mc_question_list.each do |exercise_question| %>
<div id="poll_questions_<%= exercise_question.id%>">
<div id="show_poll_questions_<%= exercise_question.id %>">
<div>
<div class="testEditTitle"> 第<%= exercise_question.question_number%>题.(<%= exercise_question.question_score %>分)<br />
<%= exercise_question.question_title %>
</div>
<div class="cl"></div>
<div class="ur_inputs">
<table class="ur_table" style="width:675px;">
<tbody>
<% exercise_question.exercise_choices.reorder("choice_position").each_with_index do |exercise_choice,index| %>
<tr>
<td>
<label>
<input class="ur_radio" type="radio" name="<%= exercise_question %>" value="<%= exercise_choice.choice_text%>" >
<%= convert_to_char((index+1).to_s)%>&nbsp;&nbsp;<%= exercise_choice.choice_text%>
</label>
</td>
</tr>
<% end %>
</tbody>
</table>
</div>
</div>
</div>
</div>
<% end %>
</div>
<div class="testStatus" id="mcq_question_list" style="display: <%=mcq_question_list.count > 0 ? "" : "none" %>">
<h3 class="fontGrey3">多选题</h3>
<% mcq_question_list.each do |exercise_question| %>
<div id="poll_questions_<%= exercise_question.id%>">
<div id="show_poll_questions_<%= exercise_question.id %>">
<div>
<div class="testEditTitle"> 第<%= exercise_question.question_number%>题.(<%= exercise_question.question_score %>分)<br />
<%= exercise_question.question_title %>
</div>
<div class="cl"></div>
<div class="ur_inputs">
<table class="ur_table" style="width:675px;">
<tbody>
<% exercise_question.exercise_choices.reorder("choice_position").each_with_index do |exercise_choice,index| %>
<tr>
<td>
<label>
<input class="ur_radio" type="checkbox" name="<%= exercise_question %>" value="<%= exercise_choice.choice_text%>" >
<%= convert_to_char((index+1).to_s)%>&nbsp;&nbsp;<%= exercise_choice.choice_text%>
</label>
</td>
</tr>
<% end %>
</tbody>
</table>
</div>
</div><!--多选题显示 end-->
</div>
</div>
<% end %>
</div>
<div class="testStatus" id="single_question_list" style="display: <%=single_question_list.count > 0 ? "" : "none" %>">
<h3 class="fontGrey3">填空题</h3>
<% single_question_list.each do |exercise_question| %>
<div id="poll_questions_<%= exercise_question.id%>">
<div id="show_poll_questions_<%= exercise_question.id %>">
<div>
<div class="testEditTitle"> 第<%= exercise_question.question_number%>题.(<%= exercise_question.question_score %>分)<br />
<%= exercise_question.question_title %>
</div>
<div class="cl"></div>
<div>
<input type="text" name="answer_text" class="fillInput" placeholder="在此填入答案" />
</div>
</div>
</div>
</div>
<% end %>
</div>
<div class="ur_buttons"> <a class="ur_button_submit" style="margin-left:80px;" onclick="student_submit_exercise()"> 提交 </a> </div>
<div class="cl"></div>
<!--contentbox end-->
</div>
<!--RSide end-->
</div>

View File

@ -0,0 +1,35 @@
<%= form_for("",
:html => { :multipart => true },
:url => {:controller => 'exercise',
:action => 'commit_exercise'
},:remote=>true ) do |f| %>
<div class="ur_buttons">
<a class="ur_button_submit" onclick="poll_submit();"> 提交 </a>
<div class="polls_cha">
<input name="exercise[show_result]" value="" type="checkbox">
<label for="">允许学生查看测验结果</label>
</div>
</div>
<% end %>
<script type="text/javascript">
function poll_submit() {
var question_form = $("form.new_exercise_question");
<% current_score = get_current_score exercise %>
if($("#polls_head_edit").is(":visible")){
alert("请先保存测验标题及测验基本信息。");
} else if(question_form.length > 0) {
alert("请先保存正在编辑的题目。");
} else{
$('#ajax-modal').html('<%= escape_javascript(render :partial => 'exercise_submit_info', locals: { :score => current_score,:is_remote => false}) %>');
showModal('ajax-modal', '310px');
$('#ajax-modal').css('height','120px');
$('#ajax-modal').siblings().remove();
$('#ajax-modal').before("<span style='float: right;cursor:pointer;'>" +
"<a href='javascript:' onclick='clickCanel();'><img src='/images/bid/close.png' width='26px' height='26px' /></a></span>");
$('#ajax-modal').parent().removeClass("alert_praise");
$('#ajax-modal').parent().css("top","").css("left","");
$('#ajax-modal').parent().addClass("popbox_polls");
}
}
</script>

View File

@ -0,0 +1,35 @@
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript">
function clickCanel(){hideModal("#popbox02");}
function exercise_submit(){
$("#exercise_submit>form")[0].submit();
hideModal("#popbox02");
}
</script>
</head>
<body>
<div id="popbox02">
<div class="upload_con">
<div class="upload_box">
<p class="polls_box_p">当前测验分数为<span class="c_red"><%=score %></span>分,
<br />
是否确定提交该测验?
</p>
<div class="polls_btn_box">
<a class="upload_btn" onclick="exercise_submit();">
确&nbsp;&nbsp;定
</a>
<a class="upload_btn upload_btn_grey" onclick="clickCanel();">
取&nbsp;&nbsp;消
</a>
</div>
<div class="cl"></div>
</div>
</div>
</div>
</body>
</html>

View File

@ -21,21 +21,21 @@
<li class="ur_item">
<label>候选答案一<span class="ur_index"></span>&nbsp;&nbsp;&nbsp;</label>
<input name="exercise_choice[0]" placeholder="请输入候选答案一" type="text">
<a class="icon_add" title="向下插入选项" onclick="add_single_answer($(this));"></a>
<a class="icon_add" title="向下插入选项" onclick="add_candidate_answer($(this));"></a>
<a class="icon_remove" title="删除" onclick="remove_single_answer($(this))"></a>
</li>
<div class="cl"></div>
<li class="ur_item">
<label>候选答案二<span class="ur_index"></span>&nbsp;&nbsp;&nbsp;</label>
<input name="exercise_choice[1]" placeholder="请输入候选答案二(选填)" type="text">
<a class="icon_add" title="向下插入选项" onclick="add_single_answer($(this));"></a>
<a class="icon_add" title="向下插入选项" onclick="add_candidate_answer($(this));"></a>
<a class="icon_remove" title="删除" onclick="remove_single_answer($(this))"></a>
</li>
<div class="cl"></div>
<li class="ur_item">
<label>候选答案三<span class="ur_index"></span>&nbsp;&nbsp;&nbsp;</label>
<input name="exercise_choice[2]" placeholder="请输入候选答案三(选填)" type="text">
<a class="icon_add" title="向下插入选项" onclick="add_single_answer($(this));"></a>
<a class="icon_add" title="向下插入选项" onclick="add_candidate_answer($(this));"></a>
<a class="icon_remove" title="删除" onclick="remove_single_answer($(this))"></a>
</li>
<div class="cl"></div>

View File

@ -5,7 +5,7 @@
<div class="fontGrey2">
<span class="mr100">发布时间:<%=Time.parse(format_time(exercise.publish_time)).strftime("%Y-%m-%d %H:%M:%S") if exercise.publish_time%></span>
<span class="mr100">截止时间:<%=Time.parse(format_time(exercise.end_time)).strftime("%Y-%m-%d %H:%M:%S") if exercise.end_time %></span>
<span>考试时长:<%= exercise.time %>分钟</span></div>
<span>测验时长:<%= exercise.time %>分钟</span></div>
<div class="testDesEdit mt5"><%= exercise.exercise_description.nil? ? "" : exercise.exercise_description.html_safe%></div>
<div class="cl"></div>
<div class="cl"></div>

View File

@ -44,21 +44,21 @@
'<li class="ur_item">'+
'<label>候选答案一<span class="ur_index"></span>&nbsp;&nbsp;&nbsp;</label>'+
'<input type="text" name="exercise_choice[0]" placeholder="请输入候选答案一"/>'+
'<a class="icon_add" title="向下插入选项" onclick="add_single_answer($(this));"></a>'+
'<a class="icon_add" title="向下插入选项" onclick="add_candidate_answer($(this));"></a>'+
'<a class="icon_remove" title="删除" onclick="remove_single_answer($(this))"></a>'+
'</li>'+
'<div class="cl"></div>'+
'<li class="ur_item">'+
'<label>候选答案二<span class="ur_index"></span>&nbsp;&nbsp;&nbsp;</label>'+
'<input type="text" name="exercise_choice[1]" placeholder="请输入候选答案二(选填)"/>'+
'<a class="icon_add" title="向下插入选项" onclick="add_single_answer($(this));"></a>'+
'<a class="icon_add" title="向下插入选项" onclick="add_candidate_answer($(this));"></a>'+
'<a class="icon_remove" title="删除" onclick="remove_single_answer($(this))"></a>'+
'</li>'+
'<div class="cl"></div>'+
'<li class="ur_item">'+
'<label>候选答案三<span class="ur_index"></span>&nbsp;&nbsp;&nbsp;</label>'+
'<input maxlength="200" type="text" name="exercise_choice[2]" placeholder="请输入候选答案三(选填)"/>'+
'<a class="icon_add" title="向下插入选项" onclick="add_single_answer($(this));"></a>'+
'<a class="icon_add" title="向下插入选项" onclick="add_candidate_answer($(this));"></a>'+
'<a class="icon_remove" title="删除" onclick="remove_single_answer($(this))"></a>'+
'</li>'+
'<div class="cl"></div>'+

View File

@ -1,8 +1,10 @@
<% if @is_insert %>
$("#poll_content").html('<%= escape_javascript(render :partial => 'exercise_content', :locals => {:exercise => @exercise})%>');
$("#exercise_submit").html("<%= escape_javascript(render :partial => 'exercise_submit', :locals => {:exercise => @exercise}) %>");
<% else %>
$("#new_exercise_question").html('<%= escape_javascript(render :partial => 'new_question', :locals => {:exercise => @exercise}) %>');
$("#new_poll_question").html("");
$("#exercise_submit").html("<%= escape_javascript(render :partial => 'exercise_submit', :locals => {:exercise => @exercise}) %>");
<%if @exercise_questions.question_type == 1%>
$("#mc_question_list").show().append("<div id='poll_questions_<%= @exercise_questions.id%>'>" +
"<div id='show_poll_questions_<%= @exercise_questions.id %>'>" +
@ -33,26 +35,6 @@
"</div>" +
"</div>");
<% end %>
/*$("#poll_content").append("<div id='poll_questions_<%#= @exercise_questions.id%>'>" +
"<div id='show_poll_questions_<%#= @exercise_questions.id %>'>" +
"<%# if @exercise_questions.question_type == 1%>" +
"<%#= escape_javascript(render :partial => 'show_MC', :locals => {:exercise_question => @exercise_questions}) %>" +
"<%# elsif @exercise_questions.question_type == 2%>" +
"<%#= escape_javascript(render :partial => 'show_MCQ', :locals => {:exercise_question => @exercise_questions}) %>" +
"<%# elsif @exercise_questions.question_type == 3%>" +
"<%#= escape_javascript(render :partial => 'show_single', :locals => {:exercise_question => @exercise_questions}) %>" +
"<%# end%>" +
"</div>" +
"<div id='edit_poll_questions_<%#= @exercise_questions.id %>' style='display: none;'>" +
"<%# if @exercise_questions.question_type == 1%>" +
"<%#= escape_javascript(render :partial => 'edit_MC', :locals => {:exercise_question => @exercise_questions}) %>" +
"<%# elsif @exercise_questions.question_type == 2%>" +
"<%#= escape_javascript(render :partial => 'edit_MCQ', :locals => {:exercise_question => @exercise_questions}) %>" +
"<%# elsif @exercise_questions.question_type == 3%>" +
"<%#= escape_javascript(render :partial => 'edit_single', :locals => {:exercise_question => @exercise_questions}) %>" +
"<%# end%>" +
"</div>" +
"</div>");*/
$("#current_score").html("<%=get_current_score @exercise %>分");
$("#current_score_div").show();
<% end %>

View File

@ -1 +1,3 @@
$("#poll_content").html("<%= escape_javascript(render :partial => 'exercise_content', :locals => {:exercise => @exercise}) %>");
$("#poll_content").html("<%= escape_javascript(render :partial => 'exercise_content', :locals => {:exercise => @exercise}) %>");
$("#current_score").html("<%=get_current_score @exercise %>分");
$("#exercise_submit").html("<%= escape_javascript(render :partial => 'exercise_submit', :locals => {:exercise => @exercise}) %>");

View File

@ -1 +1,5 @@
111111
<% if @is_teacher %>
<% else %>
<%=render :partial => 'exercise_student', :locals => {:exercise =>@exercise, :exercise_questions => @exercise_questions,:exercise_student => @exercise_student} %>
<% end %>

View File

@ -1,4 +1,5 @@
$("#polls_head_show").html("<%= escape_javascript(render :partial => 'show_head', :locals => {:exercise => @exercise}) %>");
$("#polls_head_edit").html("<%= escape_javascript(render :partial => 'edit_head', :locals => {:exercise => @exercise}) %>");
$("#polls_head_edit").hide();
$("#polls_head_show").show();
$("#polls_head_show").show();
$("#exercise_submit").html("<%= escape_javascript(render :partial => 'exercise_submit', :locals => {:exercise => @exercise}) %>");

View File

@ -17,3 +17,4 @@ $("#poll_questions_<%= @exercise_question.id%>").html("<div id='show_poll_questi
"<% end%>" +
"</div>");
$("#current_score").html("<%=get_current_score @exercise %>分");
$("#exercise_submit").html("<%= escape_javascript(render :partial => 'exercise_submit', :locals => {:exercise => @exercise}) %>");