1、编程作业可以修改、删除

2、关闭匿评之后结束匿评按钮样式
3、编程作业成绩计算有问题
4、相关样式修改
5、编程作业作品展开界面功能
This commit is contained in:
sw 2015-09-18 11:05:21 +08:00
parent a8c5d18069
commit 4b83265508
8 changed files with 158 additions and 38 deletions

View File

@ -201,9 +201,7 @@ class StudentWorkController < ApplicationController
end end
def destroy def destroy
if @homework.homework_type == 2 #编程作业,作品提交后不可以删除 if @work.destroy
render_403
elsif @work.destroy
respond_to do |format| respond_to do |format|
format.html { format.html {
redirect_to student_work_index_url(:homework => @homework.id) redirect_to student_work_index_url(:homework => @homework.id)
@ -257,7 +255,6 @@ class StudentWorkController < ApplicationController
when 3 #学生评分 学生评分显示平均分 when 3 #学生评分 学生评分显示平均分
@work.student_score = @work.student_works_scores.where(:reviewer_role => 3).average(:score).try(:round, 2).to_f @work.student_score = @work.student_works_scores.where(:reviewer_role => 3).average(:score).try(:round, 2).to_f
end end
set_final_score @homework,@work
if @work.save if @work.save
respond_to do |format| respond_to do |format|
format.js format.js

View File

@ -2362,7 +2362,7 @@ module ApplicationHelper
if homework.homework_type == 1 && homework.homework_detail_manual && homework.homework_detail_manual.comment_status != 1 #匿评作业,且作业状态不是在开启匿评之前 if homework.homework_type == 1 && homework.homework_detail_manual && homework.homework_detail_manual.comment_status != 1 #匿评作业,且作业状态不是在开启匿评之前
link_to "作品已交", "", :class => 'c_blue', :title => "开启匿评后不可修改作品" link_to "作品已交", "", :class => 'c_blue', :title => "开启匿评后不可修改作品"
elsif homework.homework_type == 2 #编程作业不能修改作品 elsif homework.homework_type == 2 #编程作业不能修改作品
link_to "作品已交", student_work_index_path(:homework => homework.id),:class => 'c_blue',:title => "编程作业不可修改作品" link_to "修改作品", new_student_work_path(:homework => homework.id),:class => 'c_blue'
else else
link_to "修改作品", edit_student_work_path(work.id),:class => 'c_blue' link_to "修改作品", edit_student_work_path(work.id),:class => 'c_blue'
end end

View File

@ -31,7 +31,7 @@ class StudentWork < ActiveRecord::Base
else else
self.system_score = last_test.test_score self.system_score = last_test.test_score
end end
self.final_score = self.system_score set_final_score self.homework_common,self
end end
end end
@ -39,4 +39,102 @@ class StudentWork < ActiveRecord::Base
self.description = last_test.src if last_test self.description = last_test.src if last_test
end end
#成绩计算
def set_final_score homework,student_work
if homework && homework.homework_detail_manual
if homework.homework_type == 1 #匿评作业
if homework.teacher_priority == 1 #教师优先
if student_work.teacher_score
student_work.final_score = student_work.teacher_score
else
if student_work.teaching_asistant_score.nil?
student_work.final_score = student_work.student_score
elsif student_work.student_score.nil?
student_work.final_score = student_work.teaching_asistant_score
else
ta_proportion = homework.homework_detail_manual.ta_proportion
final_ta_score = BigDecimal.new("#{student_work.teaching_asistant_score}") * BigDecimal.new("#{ta_proportion}")
final_s_score = BigDecimal.new("#{student_work.student_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{ta_proportion}"))
final_score = final_ta_score + final_s_score
student_work.final_score = format("%.2f",final_score.to_f)
end
end
else #不考虑教师评分
if student_work.teaching_asistant_score.nil?
student_work.final_score = student_work.student_score
elsif student_work.student_score.nil?
student_work.final_score = student_work.teaching_asistant_score
else
ta_proportion = homework.homework_detail_manual.ta_proportion
final_ta_score = BigDecimal.new("#{student_work.teaching_asistant_score}") * BigDecimal.new("#{ta_proportion}")
final_s_score = BigDecimal.new("#{student_work.student_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{ta_proportion}"))
final_score = final_ta_score + final_s_score
student_work.final_score = format("%.2f",final_score.to_f)
end
end
elsif homework.homework_type == 2 && homework.homework_detail_programing #编程作业-----设定:系统评分必定不为空
if homework.teacher_priority == 1 #教师优先
if student_work.teacher_score
student_work.final_score = student_work.teacher_score
else
if student_work.teaching_asistant_score.nil? #教辅未评分
if student_work.student_score.nil?
student_work.final_score = student_work.system_score
else
ta_proportion = homework.homework_detail_programing.ta_proportion + homework.homework_detail_manual.ta_proportion / 2
final_sy_score = BigDecimal.new("#{student_work.system_score || 0}") * BigDecimal.new("#{ta_proportion}")
final_st_score = BigDecimal.new("#{student_work.student_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{ta_proportion}"))
final_score = final_sy_score + final_st_score
student_work.final_score = format("%.2f",final_score.to_f)
end
elsif student_work.student_score.nil? #学生未评分
if student_work.teaching_asistant_score.nil?
student_work.final_score = student_work.system_score
else
ta_proportion = homework.homework_detail_programing.ta_proportion + (1.0 - homework.homework_detail_manual.ta_proportion - homework.homework_detail_programing.ta_proportion) / 2
final_sy_score = BigDecimal.new("#{student_work.system_score || 0}") * BigDecimal.new("#{ta_proportion}")
final_ts_score = BigDecimal.new("#{student_work.teaching_asistant_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{ta_proportion}"))
final_score = final_sy_score + final_ts_score
student_work.final_score = format("%.2f",final_score.to_f)
end
else
final_sy_score = BigDecimal.new("#{student_work.system_score || 0}") * BigDecimal.new("#{homework.homework_detail_programing.ta_proportion}")
final_ts_score = BigDecimal.new("#{student_work.teaching_asistant_score}") * BigDecimal.new("#{homework.homework_detail_manual.ta_proportion}")
final_st_score = BigDecimal.new("#{student_work.student_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{homework.homework_detail_programing.ta_proportion}") - BigDecimal.new("#{homework.homework_detail_manual.ta_proportion}"))
final_score = final_sy_score + final_ts_score + final_st_score
student_work.final_score = format("%.2f",final_score.to_f)
end
end
else #不考虑教师评分
if student_work.teaching_asistant_score.nil? #教辅未评分
if student_work.student_score.nil?
student_work.final_score = student_work.system_score
else
ta_proportion = homework.homework_detail_programing.ta_proportion + homework.homework_detail_manual.ta_proportion / 2
final_sy_score = BigDecimal.new("#{student_work.system_score || 0}") * BigDecimal.new("#{ta_proportion}")
final_st_score = BigDecimal.new("#{student_work.student_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{ta_proportion}"))
final_score = final_sy_score + final_st_score
student_work.final_score = format("%.2f",final_score.to_f)
end
elsif student_work.student_score.nil? #学生未评分
if student_work.teaching_asistant_score.nil?
student_work.final_score = student_work.system_score
else
ta_proportion = homework.homework_detail_programing.ta_proportion + (1.0 - homework.homework_detail_manual.ta_proportion - homework.homework_detail_programing.ta_proportion) / 2
final_sy_score = BigDecimal.new("#{student_work.system_score || 0}") * BigDecimal.new("#{ta_proportion}")
final_ts_score = BigDecimal.new("#{student_work.teaching_asistant_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{ta_proportion}"))
final_score = final_sy_score + final_ts_score
student_work.final_score = format("%.2f",final_score.to_f)
end
else
final_sy_score = BigDecimal.new("#{student_work.system_score || 0}") * BigDecimal.new("#{homework.homework_detail_programing.ta_proportion}")
final_ts_score = BigDecimal.new("#{student_work.teaching_asistant_score}") * BigDecimal.new("#{homework.homework_detail_manual.ta_proportion}")
final_st_score = BigDecimal.new("#{student_work.student_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{homework.homework_detail_programing.ta_proportion}") - BigDecimal.new("#{homework.homework_detail_manual.ta_proportion}"))
final_score = final_sy_score + final_ts_score + final_st_score
student_work.final_score = format("%.2f",final_score.to_f)
end
end
end
end
end
end end

View File

@ -1,2 +1,2 @@
$("#<%= @homework.id %>_stop_anonymous_comment").replaceWith('<span class="fr pr_join_span mr10" title="匿评结束">匿评结束</span>'); $("#<%= @homework.id %>_stop_anonymous_comment").replaceWith('<span class="postOptionLink" title="匿评结束">匿评结束</span>');
alert('关闭成功'); alert('关闭成功');

View File

@ -37,8 +37,8 @@
<% if @homework.homework_type == 2%> <% if @homework.homework_type == 2%>
<!-- 系统评分 --> <!-- 系统评分 -->
<li class="hworkList80 c_grey"> <li class="hworkList80 <%= score_color student_work.system_score%>">
<%= student_work.teaching_asistant_score.nil? ? "--" : format("%.1f",student_work.teaching_asistant_score)%> <%= student_work.system_score.nil? ? "--" : format("%.1f",student_work.system_score)%>
</li> </li>
<% end%> <% end%>
<li class="hworkList50 <%= score_color student_work.student_score%> student_score_info"> <li class="hworkList50 <%= score_color student_work.student_score%> student_score_info">

View File

@ -1,42 +1,56 @@
<div class="show_hwork_arrow"></div> <div class="show_hwork_arrow"></div>
<div class="show_hwork"> <div class="showHwork">
<ul> <ul>
<li class="fl" > <li class="fl" >
<span class="tit_fb"> <span class="tit_fb">上交时间:</span>
上交时间:
</span>
<%=format_time @work.created_at %> <%=format_time @work.created_at %>
</li> </li>
<% if @work.user != User.current%>
<!-- 不是自己显示为点赞,编程作业不可编辑和删除 --> <% if @work.user == User.current && @homework.homework_detail_manual.comment_status == 1 %>
<!-- 我的作业 && 匿评作业 && 未开启匿评,显示编辑和删除按钮 -->
<li class="fr" >
<%= link_to("", student_work_path(@work),:method => 'delete', :confirm => l(:text_are_you_sure), :class => "pic_del") %>
</li>
<li class="fr" >
<%= link_to "",new_student_work_path(:homework => @homework.id),:class => "pic_edit"%>
</li>
<% end%>
<% if @homework.homework_detail_manual.comment_status == 3 && @work.user != User.current%>
<!-- 匿评结束阶段,显示点赞按钮 -->
<li class="fr" id="student_work_praise_<%= @work.id%>"> <li class="fr" id="student_work_praise_<%= @work.id%>">
<%= render :partial => 'student_work_praise' %> <%= render :partial => 'student_work_praise' %>
</li> </li>
<% end%> <% end%>
<div class="cl"></div> <div class="cl"></div>
<li > <li >
<span class="tit_fb "> <span class="tit_fb ">编程代码:</span>
编程代码: <div class="showHworkP break_word">
</span> <%= text_format(@work.description) if @work.description%>
<div class="show_hwork_p break_word">
<%= text_format @work.description%>
</div> </div>
<div class="cl"></div> <div class="cl"></div>
</li> </li>
<% if @is_teacher%> <% if @is_teacher%>
<li> <li class="mt10 fl">
<span class="tit_fb "> <span class="tit_fb ">
测试结果: 测试结果:
</span> </span>
<div class="show_hwork_p break_word"> <div class="show_hwork_p break_word">
<% @work.student_work_tests.each_with_index do |test, index| %> <% @work.student_work_tests.each_with_index do |test, index| %>
<div class="ProResultTop"> <div class="ProResultTop">
<p class="c_blue fl">第<%= @work.student_work_tests.count - index%>次测试</p><span class="fr c_grey"><%= test.created_at.to_s(:db) %></span> <p class="c_blue fl">
第<%= @work.student_work_tests.count - index%>次测试
</p>
<span class="fr c_grey">
<%= test.created_at.to_s(:db) %>
</span>
<div class="cl"></div> <div class="cl"></div>
</div> </div>
<% if test.status.to_i == -2 %> <% if test.status.to_i == -2 %>
<div class="ProResultCon "><%= test.results.first %></div> <div class="ProResultCon ">
<%= test.results.first %>
</div>
<% else %> <% else %>
<div class="ProResultTable " > <div class="ProResultTable " >
<ul class="ProResultUl " > <ul class="ProResultUl " >
@ -46,9 +60,9 @@
<% if x["status"].to_i != 0 %> <% if x["status"].to_i != 0 %>
<span class="w150 c_red">测试错误!</span> <span class="w150 c_red">测试错误!</span>
<span class="w60">您的输出:</span> <span class="w60">您的输出:</span>
<span class="W200"><%=x["result"]%></span> <span class="width150"><%=x["result"]%></span>
<span class="w60">正确输出:</span> <span class="w60">正确输出:</span>
<span class="W200"><%=x["output"]%></span> <span class="width150"><%=x["output"]%></span>
<div class="cl"></div> <div class="cl"></div>
<% else %> <% else %>
<span class="w150 c_green">测试正确!</span> <span class="w150 c_green">测试正确!</span>
@ -56,27 +70,33 @@
<% end %> <% end %>
</li> </li>
<% end %> <% end %>
</ul> </ul>
</div> </div>
<% end %> <% end %>
<% end %> <% end %>
</div> </div>
</li> </li>
<!-- 编程作业老师才可以评分 -->
<div id="add_student_score_<%= @work.id%>" class="mt10 evaluation">
<%= render :partial => 'add_score',:locals => {:work => @work,:score => @score}%>
</div>
<% end%> <% end%>
<li >
<% if @is_teacher || (@homework.homework_detail_manual.comment_status == 2 && @work.user != User.current )%>
<!-- 老师 || 开启匿评状态 && 不是当前用户自己的作品 -->
<div id="add_student_score_<%= @work.id%>" class="mt10 evaluation">
<%= render :partial => 'add_score',:locals => {:work => @work,:score => @score}%>
</div>
<% end%>
<div class="cl"></div>
</li>
</ul> </ul>
<div class="ping_box mt10" id="score_list_<%= @work.id%>" style="<%= @work.student_works_scores.empty? ? 'padding:0px;' : ''%>"> <div class="ping_box fl" id="score_list_<%= @work.id%>" style="<%= @work.student_works_scores.empty? ? 'padding:0px;' : ''%>">
<%@work.student_works_scores.order("updated_at desc").each do |score|%> <%@student_work_scores.each do |score|%>
<div id="work_score_<%= score.id%>"> <div id="work_score_<%= score.id%>">
<%= render :partial => 'student_work_score',:locals => {:score => score}%> <%= render :partial => 'student_work_score',:locals => {:score => score,:is_last => score == @student_work_scores.last}%>
</div> </div>
<% end%> <% end%>
</div><!---ping_box end---> </div>
<a href="javascript:void(0);" class="fr c_blue mt5 mb5" onclick="$('#about_hwork_<%= @work.id%>').html('');">收起</a> <!---ping_box end--->
<a href="javascript:void(0);" class="fr linkBlue mt5 mb5" onclick="$('#about_hwork_<%= @work.id%>').html('');">收起</a>
<div class="cl"></div> <div class="cl"></div>
</div><!---show_hwork end---> </div>

View File

@ -284,6 +284,7 @@ a:hover.tijiao{ background:#0f99a9;}
.members_left ul li a{ float:left; text-align:center;} .members_left ul li a{ float:left; text-align:center;}
.members_left ul li span{ float:left; text-align:center; color:#484747;} .members_left ul li span{ float:left; text-align:center; color:#484747;}
.w150{ text-align:center; width:150px;min-height: 10px;} .w150{ text-align:center; width:150px;min-height: 10px;}
.width150{width:150px;min-height: 10px;}
.f_b{ font-weight: bold;} .f_b{ font-weight: bold;}
.members_right label{ margin-left:15px;} .members_right label{ margin-left:15px;}
.N_search{ height:20px; border:1px solid #999;} .N_search{ height:20px; border:1px solid #999;}
@ -692,7 +693,7 @@ a.hwork_center{ display:block; width:60px; text-align:center; margin-right:5px;}
.show_hwork_arrow{ position:relative; top:2px; left:165px;background:url(../images/course/arrow_up.jpg) 0 0 no-repeat; width:20px; height:11px;} .show_hwork_arrow{ position:relative; top:2px; left:165px;background:url(../images/course/arrow_up.jpg) 0 0 no-repeat; width:20px; height:11px;}
.tit_fb{ font-weight:bold; width:66px; text-align:right; display:block; float:left;} .tit_fb{ font-weight:bold; width:66px; text-align:right; display:block; float:left;}
.ml160{ margin-left:160px;} .ml160{ margin-left:160px;}
.show_hwork_p{ width:580px; float:left;} .show_hwork_p{ width:630px; float:left;}
.hwork_ping_text{ float:left; border:1px solid #e4e4e4; padding:5px; width:615px; height:35px;} .hwork_ping_text{ float:left; border:1px solid #e4e4e4; padding:5px; width:615px; height:35px;}
.ping_box{ width:676px; padding:10px; background:#f5f3f3; } .ping_box{ width:676px; padding:10px; background:#f5f3f3; }
a.ping_pic{ display:block; width:34px; height:34px; padding:2px; border:1px solid #e3e3e3;} a.ping_pic{ display:block; width:34px; height:34px; padding:2px; border:1px solid #e3e3e3;}

View File

@ -1141,3 +1141,7 @@ a:hover.tijiao{ background:#0f99a9;}
.c_pink{ color:#e65d5e;} .c_pink{ color:#e65d5e;}
.ni_con_work { width:300px; margin:25px 20px;} .ni_con_work { width:300px; margin:25px 20px;}
.ni_con_work p{ color:#808181; } .ni_con_work p{ color:#808181; }
a.link_file_a{ background:url(../images/pic_file.png) 0 2px no-repeat; padding-left:20px; }
a:hover.link_file_a{ background:url(../images/pic_file.png) 0 -25px no-repeat; color:#3ca5c6;}
.link_file_a{ display:block; max-width:450px;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;}