基于项目的分做作业,关联项目列表需要增加“更换项目”的功能

This commit is contained in:
cxt 2016-12-09 16:39:24 +08:00
parent b0559788db
commit 0b217b9998
10 changed files with 152 additions and 28 deletions

View File

@ -7,7 +7,7 @@ class StudentWorkController < ApplicationController
require "base64" require "base64"
before_filter :find_homework, :only => [:new, :index, :create, :student_work_absence_penalty, :absence_penalty_list, :evaluation_list, :program_test,:program_test_ex, before_filter :find_homework, :only => [:new, :index, :create, :student_work_absence_penalty, :absence_penalty_list, :evaluation_list, :program_test,:program_test_ex,
:set_score_rule,:forbidden_anonymous_comment,:delete_work,:new_student_work_project,:student_work_project,:cancel_relate_project, :set_score_rule,:forbidden_anonymous_comment,:delete_work,:new_student_work_project,:student_work_project,:cancel_relate_project,
:search_course_students,:work_canrepeat,:add_group_member] :search_course_students,:work_canrepeat,:add_group_member,:change_project]
before_filter :find_work, :only => [:edit, :update, :show, :destroy, :add_score, :praise_student_work,:retry_work,:revise_attachment] before_filter :find_work, :only => [:edit, :update, :show, :destroy, :add_score, :praise_student_work,:retry_work,:revise_attachment]
before_filter :member_of_course, :only => [:new, :create, :show, :add_score, :praise_student_work] before_filter :member_of_course, :only => [:new, :create, :show, :add_score, :praise_student_work]
before_filter :author_of_work, :only => [:edit, :update, :destroy] before_filter :author_of_work, :only => [:edit, :update, :destroy]
@ -1138,6 +1138,26 @@ class StudentWorkController < ApplicationController
end end
end end
# 作品更换关联项目
def change_project
work = @homework.student_works.has_committed.where("user_id = #{User.current.id}").first
project = Project.find params[:projectName].to_i
if work && project
relate_user_ids = work.student_work_projects.map{|pro| pro.user_id}
member_ids = project.members.map{|mem| mem.user_id}
if (relate_user_ids & member_ids) == relate_user_ids
work.student_work_projects.update_all(:project_id => params[:projectName].to_i)
student_works = @homework.student_works.where("user_id in #{'(' + relate_user_ids.join(',') + ')'}")
student_works.update_all(:project_id => params[:projectName].to_i)
else
@remain_user_ids = relate_user_ids - (relate_user_ids & member_ids)
end
end
respond_to do |format|
format.js
end
end
#查找课程的学生 #查找课程的学生
def search_course_students def search_course_students
name = "" name = ""

View File

@ -0,0 +1,64 @@
<div id="muban_popup_box" style="width:400px;">
<div class="muban_popup_top">
<h3 class="fl">更换项目</h3>
<a href="javascript:void(0);" class="muban_icons_close fr"></a>
<div class="cl"></div>
</div>
<div class="muban_popup_con clear ml30 mr30 mt10">
<%= form_for('new_form',:url =>{:controller => 'student_work',:action => 'change_project',:homework => @homework.id},:method => "post", :remote => true) do |f|%>
<input type="text" name="project" placeholder="输入项目名称进行搜索" class="searchResourcePopup mb10" />
<div class="cl"></div>
<p id="no_search_result" class="c_red f14" style="width:320px;display: none">您当前尚未创建任何项目,请先创建项目再关联。</p>
<ul id="search_project_list" class="maxHeight200"></ul>
<p id="notes" class="c_red"></p>
<a href="javascript:void(0);" class="sy_btn_blue fr" onclick="clickOK();">确定</a>
<a href="javascript:void(0);" class="sy_btn_grey fr mr5" onclick="clickCanel();">取消</a>
<div class="cl"></div>
<% end %>
</div>
</div>
<script type="text/javascript">
var lastSearchCondition = '';
var count = 0;
function search_pros(e){
if($(e.target).val().trim() == lastSearchCondition && lastSearchCondition != '')
{
return;
}
lastSearchCondition = $(e.target).val().trim();
$.ajax({
url: '<%= url_for(:controller => 'student_work', :action => 'search_user_projects') %>'+'?name='+ e.target.value,
type:'get'
});
}
function throttle(method,context,e){
clearTimeout(method.tId);
method.tId=setTimeout(function(){
method.call(context,e);
},500);
}
//查询项目
$("input[name='project']").on('input', function (e) {
throttle(search_pros,window,e);
});
$(document).ready(function(){
$.ajax({
url: '<%= url_for(:controller => 'student_work', :action => 'search_user_projects') %>'+'?first=1',
type:'get'
});
});
function clickOK() {
var radio = $("input[name='projectName']:checked");
if(radio.length < 1) {
$("#notes").html("请先选择一个项目");
return false;
} else {
$("#muban_popup_box").find('form').submit();
hideModal();
}
}
</script>

View File

@ -1,16 +1,21 @@
<div id="popbox02" style=""> <div id="muban_popup_box" style="width:400px;">
<span class="f16 fontBlue">关联项目</span> <div class="muban_popup_top">
<a href="javascript:void(0);" class="popClose" onclick="clickCanel();"></a> <h3 class="fl">关联项目</h3>
<%=form_tag url_for(:controller=>'student_work',:action=>'student_work_project',:homework=>@homework.id,:user_activity_id=>@user_activity_id,:hw_status =>@hw_status),:id =>'student_work_relate_project',:class=>'resourcesSearchBox',:remote => true do %> <a href="javascript:void(0);" class="muban_icons_close fr"></a>
<input type="text" name="project" placeholder="输入项目名称进行搜索" class="searchResourcePopup mb10" /> <div class="cl"></div>
<div class="cl"></div> </div>
<p id="no_search_result" class="c_red" style="width:220px;display: none">您当前尚未创建任何项目,请先创建项目再关联。</p> <div class="muban_popup_con clear ml30 mr30 mt10">
<ul id="search_project_list" class="maxHeight100"></ul> <%= form_for('new_form',:url =>{:controller => 'student_work',:action => 'student_work_project',:homework => @homework.id,:user_activity_id=>@user_activity_id,:hw_status =>@hw_status},:method => "post", :remote => true) do |f|%>
<p id="notes" class="c_red"></p> <input type="text" name="project" placeholder="输入项目名称进行搜索" class="searchResourcePopup mb10" />
<div class="courseSendSubmit mt10"><a href="javascript:void(0);" class="sendSourceText" onclick="clickOK();">确定</a></div> <div class="cl"></div>
<div class="courseSendCancel mt10"><a href="javascript:void(0);" class="sendSourceText" onclick="clickCanel();">取消</a></div> <p id="no_search_result" class="c_red f14" style="width:320px;display: none">您当前尚未创建任何项目,请先创建项目再关联。</p>
<div class="cl"></div> <ul id="search_project_list" class="maxHeight200"></ul>
<% end %> <p id="notes" class="c_red"></p>
<a href="javascript:void(0);" class="sy_btn_blue fr" onclick="clickOK();">确定</a>
<a href="javascript:void(0);" class="sy_btn_grey fr mr5" onclick="clickCanel();">取消</a>
<div class="cl"></div>
<% end %>
</div>
</div> </div>
<script type="text/javascript"> <script type="text/javascript">
var lastSearchCondition = ''; var lastSearchCondition = '';
@ -52,7 +57,7 @@
$("#notes").html("请先选择一个项目"); $("#notes").html("请先选择一个项目");
return false; return false;
} else { } else {
$("#student_work_relate_project").submit(); $("#muban_popup_box").find('form').submit();
} }
} }
</script> </script>

View File

@ -3,18 +3,22 @@
<% allow_visit = project.status != 9 && (project.is_public || User.current.member_of?(project) || User.current.admin? || User.current.allowed_to?(:as_teacher, @homework.course)) %> <% allow_visit = project.status != 9 && (project.is_public || User.current.member_of?(project) || User.current.admin? || User.current.allowed_to?(:as_teacher, @homework.course)) %>
<div class="syllabus_courses_list" style="cursor: default"> <div class="syllabus_courses_list" style="cursor: default">
<div class="sy_courses_open"> <div class="sy_courses_open">
<% projectUser = User.where("id=?",project.user_id).first %>
<% is_change = project.status == 9 && projectUser == User.current && @homework.student_works.has_committed.where("user_id = #{User.current.id}").count == 1 %>
<h3> <h3>
<% if allow_visit %> <% if allow_visit %>
<%= link_to "#{project.name}", project_path(project.id,:host=>Setting.host_name), :target => '_blank', :class => "new_project_title fl",:id => "show_project_#{project.id}", :title => (project.is_public? ? "公开项目:":"私有项目:") + project.name%> <%= link_to "#{project.name}", project_path(project.id,:host=>Setting.host_name), :target => '_blank', :class => "new_project_title fl",:id => "show_project_#{project.id}", :title => (project.is_public? ? "公开项目:":"私有项目:") + project.name%>
<% elsif project.status != 9 %> <% elsif project.status != 9 %>
<a href="javascript:void(0)" class="new_project_title fl" title="私有项目不可访问"><%=project.name %></a> <a href="javascript:void(0)" class="new_project_title fl" title="私有项目不可访问"><%=project.name %></a>
<% else %> <% else %>
<a href="javascript:void(0)" class="new_project_title fl" title="项目已删除"><%=project.name %></a> <a href="javascript:void(0)" onclick="alert_notice_box();" class="new_project_title fl <%= is_change ? 'mw380' : '' %>" title="项目已删除"><%=project.name %></a>
<% end %> <% end %>
</h3> </h3>
<span class="<%= project.is_public? ? 'syllabus_class_open' : 'syllabus_class_private' %> fl ml10 mt3 syllabus_class_property"><%= project.is_public? ? '公开' : '私有' %></span> <span class="<%= project.is_public? ? 'syllabus_class_open' : 'syllabus_class_private' %> fl ml10 mt3 syllabus_class_property"><%= project.is_public? ? '公开' : '私有' %></span>
<% projectUser = User.where("id=?",project.user_id).first %> <% if is_change %>
<%=link_to "<span class='fr grayTxt'>创建者:#{projectUser.try(:realname) != " " ? projectUser.lastname + projectUser.firstname : projectUser.try(:login)}</span>".html_safe, user_path(projectUser) %> <a href="javascript:void(0)" onclick="alert_change_project();" class="btn_grey_mid mt-5 ml10 fr">更换项目</a>
<% end %>
<%=link_to "<span class='fr grayTxt hidden mw150'>创建者:#{projectUser.show_name}</span>".html_safe, user_path(projectUser), :title => "#{projectUser.show_name}" %>
<div class="cl"></div> <div class="cl"></div>
</div> </div>
<div> <div>
@ -31,3 +35,15 @@
</div> </div>
<% end %> <% end %>
</div><!--syllabus_courses_box end--> </div><!--syllabus_courses_box end-->
<script>
function alert_notice_box(){
var htmlvalue = '<div id="muban_popup_box" style="width:300px;"><div class="muban_popup_top"><h3 class="fl">提示</h3><a href="javascript:void(0);" class="muban_icons_close fr"></a></div>'+
'<div class="clear mt15"><p class="text_c f14">项目已删除,链接无效</p><div class="cl"></div>'+
'<a href="javascript:void(0);" class="fr sy_btn_blue mt10" style="margin-right: 119px;" onclick="hideModal();">确&nbsp;&nbsp;定</a></div></div>';
pop_box_new(htmlvalue, 300, 140);
}
function alert_change_project(){
var htmlvalue = "<%= escape_javascript(render :partial => 'student_work/change_project') %>";
pop_box_new(htmlvalue, 400, 285);
}
</script>

View File

@ -0,0 +1,17 @@
<% if @remain_user_ids %>
<% str = "" %>
<% @remain_user_ids.each do |user_id| %>
<% user = User.find user_id %>
<% if str == "" %>
<% str += user.show_name.to_s + "(" + user.login.to_s + ")" %>
<% else %>
<% str += "、" + user.show_name.to_s + "(" + user.login.to_s + ")" %>
<% end %>
<% end %>
var htmlvalue = '<div id="muban_popup_box" style="width:350px;"><div class="muban_popup_top"><h3 class="fl">提示</h3><a href="javascript:void(0);" class="muban_icons_close fr"></a></div>'+
'<div class="clear mt15"><p class="text_c f14">以下组员还不是项目成员,请先前往项目添加成员</p><p class="text_c f14"><%=str %></p><div class="cl"></div>'+
'<a href="javascript:void(0);" class="fr sy_btn_blue mt10" style="margin-right: 144px;" onclick="hideModal();">确&nbsp;&nbsp;定</a></div></div>';
pop_box_new(htmlvalue, 350, 140);
<% else %>
window.location.href = "<%=student_work_index_url(:homework => @homework.id, :tab => 3) %>";
<% end %>

View File

@ -186,8 +186,10 @@
<% if @homework.homework_type == 3 && @homework.homework_detail_group.base_on_project == 1 %> <% if @homework.homework_type == 3 && @homework.homework_detail_group.base_on_project == 1 %>
<div class="undis" id="student_work_con3"> <div class="undis" id="student_work_con3">
<% project_ids = @homework.student_work_projects.blank? ? "(-1)" : "(" + @homework.student_work_projects.map{|pro| pro.project_id}.join(",") + ")" %> <% student_work_ids = @homework.student_works.has_committed.blank? ? "(-1)" : "(" + @homework.student_works.has_committed.map{|st| st.id}.join(",") + ")" %>
<% projects = Project.where("id in #{project_ids}") %> <% student_work_projects = @homework.student_work_projects.where("student_work_id in #{student_work_ids} or student_work_id is null") %>
<% project_ids = student_work_projects.blank? ? "(-1)" : "(" + student_work_projects.map{|pro| pro.project_id}.join(",") + ")" %>
<% projects = Project.where("id in #{project_ids}").order("updated_on desc") %>
<%= render :partial => "student_work/relate_projects", :locals => {:projects => projects}%> <%= render :partial => "student_work/relate_projects", :locals => {:projects => projects}%>
</div> </div>
<% end %> <% end %>

View File

@ -1,5 +1,2 @@
$('#ajax-modal').html('<%= escape_javascript(render :partial => 'student_work/relate_project') %>'); var htmlvalue = "<%= escape_javascript(render :partial => 'student_work/relate_project') %>";
showModal('ajax-modal', '320px'); pop_box_new(htmlvalue, 400, 285);
$('#ajax-modal').siblings().remove();
$('#ajax-modal').parent().css("top","").css("left","");
$('#ajax-modal').parent().addClass("groupPopUp");

View File

@ -3,7 +3,7 @@
<% else %> <% else %>
$("#search_project_list").html(""); $("#search_project_list").html("");
<% @project_ids.each do |project|%> <% @project_ids.each do |project|%>
link = "<li><label><input type='radio' class='courseSendCheckbox' name='projectName' value='<%=project.id%>'/><span class='sendCourseName'> <%=project.name %> </span></label></li>"; link = "<li><input type='radio' class='courseSendCheckbox fl' name='projectName' value='<%=project.id%>'/><a href='<%=project_path(project) %>' target='_blank' class='hidden fl' style='padding-top: 8px; max-width: 300px;'> <%=project.name %> </a><div class='cl'></div></li>";
$("#search_project_list").append(link ); $("#search_project_list").append(link);
<% end %> <% end %>
<% end %> <% end %>

View File

@ -335,6 +335,7 @@ RedmineApp::Application.routes.draw do
collection do collection do
post 'add_score_reply' post 'add_score_reply'
post 'student_work_project' post 'student_work_project'
post 'change_project'
get 'new_student_work_project' get 'new_student_work_project'
get 'search_user_projects' get 'search_user_projects'
get 'search_course_students' get 'search_course_students'

View File

@ -316,6 +316,7 @@ h4{ font-size:14px;}/*color:#3b3b3b;*/
.H60 {height:60px !important;} .H60 {height:60px !important;}
.H150{ height:150px;} .H150{ height:150px;}
.p10 {padding-left:10px; padding-right:10px;} .p10 {padding-left:10px; padding-right:10px;}
.mw150 {max-width: 150px !important;}
.mw220 {max-width: 220px !important;} .mw220 {max-width: 220px !important;}
.mw280 {max-width:280px !important;} .mw280 {max-width:280px !important;}
.mw360 {max-width: 360px !important;} .mw360 {max-width: 360px !important;}
@ -324,6 +325,7 @@ h4{ font-size:14px;}/*color:#3b3b3b;*/
.mh18 {max-height: 18px;} .mh18 {max-height: 18px;}
.max_h54 {max-height:54px; } .max_h54 {max-height:54px; }
.maxHeight100 {max-height:100px; overflow-x:hidden; overflow-y:auto;} .maxHeight100 {max-height:100px; overflow-x:hidden; overflow-y:auto;}
.maxHeight200 {max-height:200px; overflow-x:hidden; overflow-y:auto;}
.W50{ width:50px;} .W50{ width:50px;}
.W120{ width:110px;} .W120{ width:110px;}