Merge branch 'dev_newproject' of https://git.trustie.net/jacknudt/trustieforge into dev_newproject

This commit is contained in:
daiao 2016-10-21 14:22:44 +08:00
commit 624cba3228
34 changed files with 787 additions and 212 deletions

View File

@ -563,6 +563,7 @@ class IssuesController < ApplicationController
# 值所以用delete是因为issue和journal在act_as_attachment中是同一个类型
# 非动态页面直接刷新,动态页面手动刷新
def delete_journal
@is_project = params[:is_project]
@issue = Issue.find(params[:id])
begin
forge_acts = ForgeMessage.where(:forge_message_type => "Journal", :forge_message_id => params[:journal_id])
@ -583,6 +584,156 @@ class IssuesController < ApplicationController
end
end
def statistics
@project = Project.find(params[:id])
if @project.nil?
render_404
end
retrieve_query
sort_init(@query.sort_criteria.empty? ? [['id', 'desc']] : @query.sort_criteria)
sort_update(@query.sortable_columns)
@query.sort_criteria = sort_criteria.to_a
@project_base_tag = 'base_projects'
if @query.valid?
@tracker_id = params[:tracker_id]
@assign_to_id = params[:assigned_to_id]
@author_id = params[:author_id]
@priority_id = params[:priority_id]
@status_id = params[:status_id]
@subject = params[:subject]
@done_ratio = params[:done_ratio]
@fixed_version_id = params[:fixed_version_id]
@issue_count = @query.issue_count
@test = params[:test]
@project_sort = 'issues.updated_on desc'
if params[:test] != "0"
case @test
when "1"
@project_sort = 'issues.created_on desc'
when "2"
@project_sort = 'issues.created_on asc'
when "3"
@project_sort = 'issues.updated_on desc'
when "4"
@project_sort = 'issues.updated_on asc'
end
end
@issues_filter = @query.issues(:order => @project_sort)
#统计
@results = {}
#统计total
@alltotal = {}
for i in 0..5 do
@alltotal[i] = 0
end
@opentotal = {}
for i in 0..5 do
@opentotal[i] = 0
end
@closetotal = {}
for i in 0..5 do
@closetotal[i] = 0
end
#开启关闭
@issue_open_count = 0
@issue_close_count = 0
@issues_filter.each do |issue|
@alltotal[0] = @alltotal[0] + 1
@alltotal[issue.tracker_id.to_i] = @alltotal[issue.tracker_id.to_i] + 1
user_id = issue.assigned_to_id
if issue.assigned_to_id.nil?
user_id = issue.author_id
end
if !@results[user_id].nil?
@results[user_id][0] = @results[user_id][0] + 1
@results[user_id][issue.tracker_id.to_i] = @results[user_id][issue.tracker_id.to_i] + 1
if issue.status_id.to_i == 5
@issue_close_count = @issue_close_count + 1
@results[user_id][12] = @results[user_id][12]+1
@results[user_id][12+issue.tracker_id.to_i] = @results[user_id][12+issue.tracker_id.to_i]+1
@closetotal[0] = @closetotal[0] + 1
@closetotal[issue.tracker_id.to_i] = @closetotal[issue.tracker_id.to_i] + 1
else
@issue_open_count = @issue_open_count + 1
@results[user_id][6] = @results[user_id][6]+1
@results[user_id][6+issue.tracker_id.to_i] = @results[user_id][6+issue.tracker_id.to_i]+1
@opentotal[0] = @opentotal[0] + 1
@opentotal[issue.tracker_id.to_i] = @opentotal[issue.tracker_id.to_i] + 1
end
else
@results[user_id] = {}
tmpuser = User.find(user_id)
@results[user_id][:name] = tmpuser.nil? ? " " : tmpuser.show_name
#所有的
@results[user_id][0] = 1
for i in 1..17 do
@results[user_id][i] = 0
end
# @results[user_id][1] = 0
# @results[user_id][2] = 0
# @results[user_id][3] = 0
# @results[user_id][4] = 0
# @results[user_id][5] = 0
@results[user_id][issue.tracker_id.to_i] = 1
#开启的 status_id = 12346
# @results[user_id][6] = 0
# @results[user_id][7] = 0
# @results[user_id][8] = 0
# @results[user_id][9] = 0
# @results[user_id][10] = 0
# @results[user_id][11] = 0
#关闭的 status_id = 5
# @results[user_id][12] = 0
# @results[user_id][13] = 0
# @results[user_id][14] = 0
# @results[user_id][15] = 0
# @results[user_id][16] = 0
# @results[user_id][17] = 0
if issue.status_id.to_i == 5
@results[user_id][12] = 1
@results[user_id][12+issue.tracker_id.to_i] = 1
@issue_close_count = @issue_close_count+1
@closetotal[0] = @closetotal[0] + 1
@closetotal[issue.tracker_id.to_i] = @closetotal[issue.tracker_id.to_i] + 1
else
@issue_open_count = @issue_open_count+1
@results[user_id][6] = 1
@results[user_id][6+issue.tracker_id.to_i] = 1
@opentotal[0] = @opentotal[0] + 1
@opentotal[issue.tracker_id.to_i] = @opentotal[issue.tracker_id.to_i] + 1
end
end
end
respond_to do |format|
format.js
end
else
render_404
end
end
private
def find_project

View File

@ -106,6 +106,8 @@ class UsersController < ApplicationController
#二级回复
def reply_to
@is_project = params[:is_project]
case params[:type]
when 'HomeworkCommon'
@reply = JournalsForMessage.find params[:reply_id]

View File

@ -34,43 +34,81 @@ class VersionsController < ApplicationController
def index
# 顶部导航
@project_menu_type = 7
type = params[:type]
version_all_count = Version.where(:project_id => @project.id)
case type
when nil,"1"
@versions = @project.versions
when "2"
@versions = @project.versions.where(:status => 'open')
when "3"
@versions = @project.versions.where(:status => 'locked')
when "4"
@versions = @project.versions.where(:status => 'closed')
end
@versions_count = Version.where(:project_id => @project.id).count
@versions_open_count = Version.where(:project_id => @project.id, :status => "open").count
@versions_locked_count = Version.where(:project_id => @project.id, :status => "locked").count
@versions_closed_count = Version.where(:project_id => @project.id, :status => "closed").count
@versions_count = version_type_count(type, @versions_count, @versions_open_count, @versions_locked_count, @versions_closed_count)
@limit = 10
@is_remote = true
@version_pages = Paginator.new @versions_count, @limit, params['page'] || 1
@offset ||= @version_pages.offset
@versions = paginateHelper @versions, @limit
respond_to do |format|
format.html {
@trackers = @project.trackers.sorted.all
retrieve_selected_tracker_ids(@trackers, @trackers.select {|t| t.is_in_roadmap?})
@with_subprojects = params[:with_subprojects].nil? ? Setting.display_subprojects_issues? : (params[:with_subprojects] == '1')
project_ids = @with_subprojects ? @project.self_and_descendants.collect(&:id) : [@project.id]
format.html
format.js
format.api
# format.html {
# @trackers = @project.trackers.sorted.all
# retrieve_selected_tracker_ids(@trackers, @trackers.select {|t| t.is_in_roadmap?})
# @with_subprojects = params[:with_subprojects].nil? ? Setting.display_subprojects_issues? : (params[:with_subprojects] == '1')
# project_ids = @with_subprojects ? @project.self_and_descendants.collect(&:id) : [@project.id]
#
# @versions = @project.shared_versions || []
# @versions += @project.rolled_up_versions.visible if @with_subprojects
# #added by young
# @versions = @versions.uniq.reverse#Modified by young
# unless params[:completed]
# @completed_versions = @versions.select {|version| version.closed? || version.completed? }
# @versions -= @completed_versions
# end
# @offset, @limit = api_offset_and_limit({:limit => 4})
# @versions_count = @versions.count
# @versions_pages = Paginator.new @versions_count, @limit, params['page']
# @offset ||= @versions_pages.offset
# @versions = @versions.slice(@offset, @limit)
# #end by young
#
# @issues_by_version = {}
# if @selected_tracker_ids.any? && @versions.any?
# issues = Issue.visible.all(
# :include => [:project, :status, :tracker, :priority, :fixed_version],
# :conditions => {:tracker_id => @selected_tracker_ids, :project_id => project_ids, :fixed_version_id => @versions.map(&:id)},
# :order => "#{Project.table_name}.lft, #{Tracker.table_name}.position, #{Issue.table_name}.id"
# )
# @issues_by_version = issues.group_by(&:fixed_version)
# end
# @versions.reject! {|version| !project_ids.include?(version.project_id) && @issues_by_version[version].blank?}
# }
# format.api {
# @versions = @project.shared_versions.all
# }
end
end
@versions = @project.shared_versions || []
@versions += @project.rolled_up_versions.visible if @with_subprojects
#added by young
@versions = @versions.uniq.reverse#Modified by young
unless params[:completed]
@completed_versions = @versions.select {|version| version.closed? || version.completed? }
@versions -= @completed_versions
end
@offset, @limit = api_offset_and_limit({:limit => 4})
@versions_count = @versions.count
@versions_pages = Paginator.new @versions_count, @limit, params['page']
@offset ||= @versions_pages.offset
@versions = @versions.slice(@offset, @limit)
#end by young
@issues_by_version = {}
if @selected_tracker_ids.any? && @versions.any?
issues = Issue.visible.all(
:include => [:project, :status, :tracker, :priority, :fixed_version],
:conditions => {:tracker_id => @selected_tracker_ids, :project_id => project_ids, :fixed_version_id => @versions.map(&:id)},
:order => "#{Project.table_name}.lft, #{Tracker.table_name}.position, #{Issue.table_name}.id"
)
@issues_by_version = issues.group_by(&:fixed_version)
end
@versions.reject! {|version| !project_ids.include?(version.project_id) && @issues_by_version[version].blank?}
}
format.api {
@versions = @project.shared_versions.all
}
# 统计各种类型数量
def version_type_count type, all_count, opened_count, locked_count, closed_count
case type
when nil, "1"
all_count
when "2"
opened_count
when "3"
locked_count
when "4"
closed_count
end
end

View File

@ -47,4 +47,9 @@ module PullRequestsHelper
end
def request_commonts_count request_id, gpid
g = Gitlab.client
comments_count = g.merge_request_comments(gpid, request_id).count
end
end

View File

@ -54,4 +54,18 @@ module VersionsHelper
def status_by_options_for_select(value)
options_for_select(STATUS_BY_CRITERIAS.collect {|criteria| [l("field_#{criteria}".to_sym), criteria]}, value)
end
# 通过类型显示不同的样式
def get_version_type type
case type
when "open"
"roadmap_blueicon"
when "locked"
"roadmap_greenicon"
when "closed"
"roadmap_greyicon"
end
end
end

View File

@ -8,7 +8,7 @@
<% end %>
<div style="text-align:center;">
<a href="<%=project_issues_path(:project_id => @project, :format => 'xls', :export => true, :set_filter => "1")%>" id="sendexcel" class="btn_newpro_grey fl ml15 mt15" alt="导出" onclick="remote_function_export('<%= @project.id %>')">导出</a>
<a href="#" class="btn_newpro_grey fl ml5 mt15" alt="统计">统计</a>
<a onclick="getIssueStatistics('<%= project_issues_statistics_path(@project.id) %>')" class="btn_newpro_grey fl ml5 mt15" alt="统计">统计</a>
<div class="pages fr" style="width:auto; display:inline-block;">
<ul id="issue_list_pagination">
<%= pagination_links_full @issue_pages, @issue_count, :per_page_links => false, :remote => @is_remote, :flag => true, :is_new => true %>

View File

@ -0,0 +1,151 @@
<div class="myissues_head mb5">
<h2 class="ml15">issue统计</h2>
</div>
<div class="clear mb5">
<div class="issues_statistics fl">
<ul>
<li>所有<a style="cursor: pointer;" onclick="showResultAll();" class="issues_greycirbg_btn "><%= @issues_filter.count %></a></li>
<li>开启<a style="cursor: pointer;" onclick="showResultOpen();" class="issues_greycirbg_btn "><%= @issue_open_count %></a></li>
<li>关闭<a style="cursor: pointer;" onclick="showResultClose();" class="issues_greycirbg_btn "><%= @issue_close_count %></a></li>
</ul>
</div><!--issues_statistics end-->
<a href="<%= new_project_issue_path(@project)%>" class="sy_btn_green fr " >新建</a>
</div>
<div id="result_all" class="">
<table class="sy_new_table " cellpadding="0" cellspacing="0">
<thead>
<tr>
<td class="dis p10" style="width:166px;">指派给</td>
<td class="w130">所有</td>
<td class="w130">需求</td>
<td class="w130">任务</td>
<td class="w130">缺陷</td>
<td class="w130">支持</td>
<td class="w130">周报</td>
</tr>
</thead>
<tbody>
<% @results.each do |k,v|%>
<tr>
<td class="hidden dis p10" style="width:166px;"><%= v[:name] %></td>
<td class="w130"><%= v[0] %></td>
<td class="w130"><%= v[2] %></td>
<td class="w130"><%= v[4] %></td>
<td class="w130"><%= v[1] %></td>
<td class="w130"><%= v[3] %></td>
<td class="w130"><%= v[5] %></td>
</tr>
<% end %>
<tr>
<td class="hidden dis p10" style="width:166px;">Total</td>
<td class="w130"><%= @alltotal[0] %></td>
<td class="w130"><%= @alltotal[2] %></td>
<td class="w130"><%= @alltotal[4] %></td>
<td class="w130"><%= @alltotal[1] %></td>
<td class="w130"><%= @alltotal[3] %></td>
<td class="w130"><%= @alltotal[5] %></td>
</tr>
</tbody>
</table>
</div>
<div id="result_open" style="display: none">
<table class="sy_new_table " cellpadding="0" cellspacing="0">
<thead>
<tr>
<td class="dis p10" style="width:166px;">指派给</td>
<td class="w130">所有</td>
<td class="w130">需求</td>
<td class="w130">任务</td>
<td class="w130">缺陷</td>
<td class="w130">支持</td>
<td class="w130">周报</td>
</tr>
</thead>
<tbody>
<% @results.each do |k,v|%>
<% if v[6] > 0 %>
<tr>
<td class="hidden dis p10" style="width:166px;"><%= v[:name] %></td>
<td class="w130"><%= v[6] %></td>
<td class="w130"><%= v[8] %></td>
<td class="w130"><%= v[10] %></td>
<td class="w130"><%= v[7] %></td>
<td class="w130"><%= v[9] %></td>
<td class="w130"><%= v[11] %></td>
</tr>
<% end %>
<% end %>
<tr>
<td class="hidden dis p10" style="width:166px;">Total</td>
<td class="w130"><%= @opentotal[0] %></td>
<td class="w130"><%= @opentotal[2] %></td>
<td class="w130"><%= @opentotal[4] %></td>
<td class="w130"><%= @opentotal[1] %></td>
<td class="w130"><%= @opentotal[3] %></td>
<td class="w130"><%= @opentotal[5] %></td>
</tr>
</tbody>
</table>
</div>
<div id="result_close" style="display: none">
<table class="sy_new_table " cellpadding="0" cellspacing="0">
<thead>
<tr>
<td class="dis p10" style="width:166px;">指派给</td>
<td class="w130">所有</td>
<td class="w130">需求</td>
<td class="w130">任务</td>
<td class="w130">缺陷</td>
<td class="w130">支持</td>
<td class="w130">周报</td>
</tr>
</thead>
<tbody>
<% @results.each do |k,v|%>
<% if v[12] > 0 %>
<tr>
<td class="hidden dis p10" style="width:166px;"><%= v[:name] %></td>
<td class="w130"><%= v[12] %></td>
<td class="w130"><%= v[14] %></td>
<td class="w130"><%= v[16] %></td>
<td class="w130"><%= v[13] %></td>
<td class="w130"><%= v[15] %></td>
<td class="w130"><%= v[17] %></td>
</tr>
<% end %>
<% end %>
<tr>
<td class="hidden dis p10" style="width:166px;">Total</td>
<td class="w130"><%= @closetotal[0] %></td>
<td class="w130"><%= @closetotal[2] %></td>
<td class="w130"><%= @closetotal[4] %></td>
<td class="w130"><%= @closetotal[1] %></td>
<td class="w130"><%= @closetotal[3] %></td>
<td class="w130"><%= @closetotal[5] %></td>
</tr>
</tbody>
</table>
</div>
<script>
function showResultAll(){
$("#result_all").show();
$("#result_open").hide();
$("#result_close").hide();
}
function showResultOpen(){
$("#result_all").hide();
$("#result_open").show();
$("#result_close").hide();
}
function showResultClose(){
$("#result_all").hide();
$("#result_open").hide();
$("#result_close").show();
}
</script>

View File

@ -1,8 +1,13 @@
<% if @issue_id %> //issue详情中回复
<%= render "jounal_refresh" %>
<%else%>
$("#div_user_issue_reply_<%=@user_activity_id %>").html("<%= escape_javascript(render :partial => 'users/project_issue_reply', :locals => {:activity => @issue, :user_activity_id => @user_activity_id}) %>");
sd_create_editor_from_data(<%= @user_activity_id %>, null, "100%", "UserActivity");
//init_activity_KindEditor_data(<%= @user_activity_id %>,"","87%", 'UserActivity');
// sd_create_editor_from_data(<%#= @issue.id%>, null, "100%");
<%end %>
<% if @issue_id %> //issue详情中回复
<%= render "jounal_refresh" %>
<%else%>
<% if params[:is_project] %>
$("#div_user_issue_reply_<%=@user_activity_id %>").html("<%= escape_javascript(render :partial => 'projects/project_issue_reply', :locals => {:activity => @issue, :user_activity_id => @user_activity_id}) %>");
<% else %>
$("#div_user_issue_reply_<%=@user_activity_id %>").html("<%= escape_javascript(render :partial => 'users/project_issue_reply', :locals => {:activity => @issue, :user_activity_id => @user_activity_id}) %>");
<% end %>
sd_create_editor_from_data(<%= @user_activity_id %>, null, "100%", "UserActivity");
//init_activity_KindEditor_data(<%= @user_activity_id %>,"","87%", 'UserActivity');
// sd_create_editor_from_data(<%#= @issue.id%>, null, "100%");
<%end %>

View File

@ -1,6 +1,11 @@
<% if @user_activity_id %>
<%# 动态中 %>
$("#div_user_issue_reply_<%=@user_activity_id%>").html("<%= escape_javascript(render :partial => 'users/project_issue_reply', :locals => {:activity => @issue, :user_activity_id => @user_activity_id}) %>");
<% if params[:is_project] %>
$("#div_user_issue_reply_<%=@user_activity_id%>").html("<%= escape_javascript(render :partial => 'projects/project_issue_reply', :locals => {:activity => @issue, :user_activity_id => @user_activity_id}) %>");
<% else %>
$("#div_user_issue_reply_<%=@user_activity_id%>").html("<%= escape_javascript(render :partial => 'users/project_issue_reply', :locals => {:activity => @issue, :user_activity_id => @user_activity_id}) %>");
<% end %>
sd_create_editor_from_data(<%= @user_activity_id%>, null, "100%","<%=@issue.class.name%>");
<% else %>
<%# issue详情 %>

View File

@ -1,6 +1,10 @@
<% if @user_activity_id %>
$("#div_user_issue_reply_<%=@user_activity_id%>").html("<%= escape_javascript(render :partial => 'users/project_issue_reply', :locals => {:activity => @issue, :user_activity_id => @user_activity_id}) %>");
sd_create_editor_from_data(<%= @user_activity_id%>, null, "100%","<%=@issue.class.name%>");
<% else %>
<%= render "jounal_refresh" %>
<% if @user_activity_id %>
<% if @is_project %>
$("#div_user_issue_reply_<%=@user_activity_id%>").html("<%= escape_javascript(render :partial => 'projects/project_issue_reply', :locals => {:activity => @issue, :user_activity_id => @user_activity_id}) %>");
<% else %>
$("#div_user_issue_reply_<%=@user_activity_id%>").html("<%= escape_javascript(render :partial => 'users/project_issue_reply', :locals => {:activity => @issue, :user_activity_id => @user_activity_id}) %>");
<% end %>
sd_create_editor_from_data(<%= @user_activity_id%>, null, "100%","<%=@issue.class.name%>");
<% else %>
<%= render "jounal_refresh" %>
<% end %>

View File

@ -203,7 +203,7 @@
</script>
<!--缺陷列表开始-->
<div class="myissues_con ">
<div id="myissues_con" class="myissues_con ">
<div class="clear mb5">
<div class="issues_statistics fl clear">
<ul>

View File

@ -0,0 +1 @@
$("#myissues_con").html("<%= escape_javascript(render :partial => 'issues/statistics')%>");

View File

@ -35,12 +35,11 @@
<%= render :partial => 'layouts/base_project_top' %>
</div>
<div class="fl">
<%= render_flash_messages %>
<%= yield %>
<%= call_hook :view_layouts_base_content %>
<div style="clear:both;"></div>
</div>
<%= render_flash_messages %>
<%= yield %>
<%= call_hook :view_layouts_base_content %>
<div style="clear:both;"></div>
<div style="clear:both;"></div>
</div>

View File

@ -76,7 +76,7 @@
<% end %>
<% end %>
<div class="cl"></div>
<div class="mt10" style="font-weight:normal;">
<div class="mb10" style="font-weight:normal;">
<%= render :partial=>"attachments/activity_attach", :locals=>{:activity => activity} %>
</div>
</div>

View File

@ -86,7 +86,7 @@
<% count = all_replies.count %>
<%# allow_delete = (activity.user == User.current || User.current.admin? || User.current.allowed_to?(:as_teacher,activity.course)) %>
<%# count = fetch_user_leaveWord_reply(activity).count %>
<div class="homepagePostReply">
<div class="container-big-grey">
<%= render :partial => 'projects/project_reply_banner', :locals => {:count => count, :activity => activity, :user_activity_id => user_activity_id,:is_course => is_course,:is_board =>is_board} %>
<% comments = all_replies[0..2] %>
@ -97,9 +97,9 @@
<% end %>
<% if !activity.locked? %>
<div class="homepagePostReplyContainer borderBottomNone minHeight48">
<div class="reply-container ml15 borderBottomNone minHeight48">
<div class="homepagePostReplyPortrait mr15 imageFuzzy" id="reply_image_<%= user_activity_id%>"><%= link_to image_tag(url_to_avatar(User.current), :width => "33", :height => "33"), user_path(activity.author_id), :alt => "用户头像" %></div>
<div class="homepagePostReplyInputContainer mb10">
<div class="reply-content mb10">
<% if User.current.logged? %>
<div nhname='new_message_<%= user_activity_id%>' style="display:none;">
<%= form_for('new_form',:url => {:controller=>'messages',:action => 'reply', :id => activity.id, :board_id => activity.board_id,:is_course => is_course, :is_board => 'true'},:method => "post", :remote => true) do |f|%>

View File

@ -48,7 +48,7 @@
<p class="proInfoP"><span><%= activity.status.name %></span> <a href="javascript:void(0)" class="pic_edit2 ml5"></a></p>
<%= select( :issue,:status, [["新增",1],["正在解决",2],["已解决",3],["反馈",4],["关闭",5],["拒绝",6]].unshift(["状态",0]),
{:include_blank => false, :selected => @status_id ? @status_id : 0 },
{:onchange=>"remote_function('#issue_query_form_#{activity.id}');",:id=>"status_id",:name=>"status_id",:class=>"w70 undis issueEdit",:style=>"white-space:nowrap; overflow:hidden;"}
{:onchange=>"remote_function('#issue_query_form_#{activity.id}');",:id=>"status_id",:name=>"status_id",:class=>"w130 undis issueEdit",:style=>"white-space:nowrap; overflow:hidden;"}
)
%>
</li>
@ -62,7 +62,7 @@
<a href="javascript:void(0)" class="pic_edit2 ml5" style="vertical-align:top;"></a></span>
<%= select( :issue, :user_id, principals_options_for_isuue_list(activity.project),
{ :include_blank => false,:selected => @assign_to_id ? @assign_to_id : 0},
{:onchange=>"remote_function('#issue_query_assign_form_#{activity.id}');", :id =>"assigned_to_id", :name => "assigned_to_id",:class=>"undis issueEdit", :style => "width:130px;"}) %>
{:onchange=>"remote_function('#issue_query_assign_form_#{activity.id}');", :id =>"assigned_to_id", :name => "assigned_to_id",:class=>"w130 undis issueEdit"}) %>
</li>
<% end %>
<div class="cl"></div>
@ -75,7 +75,7 @@
<span class="proInfoP"><span><%= activity.priority.name %></span> <a href="javascript:void(0)" class="pic_edit2 ml5"></a> </span>
<%= select( :issue,:prior, [["低",1],["正常",2],["高",3],["紧急",4],["立刻",5]].unshift(["优先级",0]),
{:include_blank => false,:selected=>@priority_id ? @priority_id : 0},
{:onchange=>"remote_function('#issue_query_prior_form_#{activity.id}');",:id=>"priority_id",:name=>"priority_id",:class=>"w70 undis issueEdit"}) %>
{:onchange=>"remote_function('#issue_query_prior_form_#{activity.id}');",:id=>"priority_id",:name=>"priority_id",:class=>"w130 undis issueEdit"}) %>
</li>
<% end %>
<div class="cl"></div>
@ -85,7 +85,7 @@
<span class="proInfoP" style="width:130px;"><span><%= activity.done_ratio %>%</span> <a href="javascript:void(0)" class="pic_edit2 ml5"></a> </span>
<%= select( :issue,:done_ratio, ((0..10).to_a.collect { |r| ["#{r*10} %", r*10] }),
{:include_blank => false, :selected => @done_ratio ? @done_ratio : 0},
{:onchange=>"remote_function('#issue_query_done_form_#{activity.id}');",:id=>"done_ratio",:name=>"done_ratio",:class=>"w70 undis issueEdit"}) %>
{:onchange=>"remote_function('#issue_query_done_form_#{activity.id}');",:id=>"done_ratio",:name=>"done_ratio",:class=>"w130 undis issueEdit"}) %>
<% end %>
</li>

View File

@ -43,7 +43,7 @@
<span style="position: relative" class="fr mr20">
<%= link_to(
l(:button_reply),
{:controller => 'users', :action => 'reply_to', :reply_id => comment.id, :type => 'Issue', :user_activity_id => user_activity_id, :activity_id => activity.id},
{:controller => 'users', :action => 'reply_to', :reply_id => comment.id, :type => 'Issue', :user_activity_id => user_activity_id, :activity_id => activity.id, :is_project => true},
:remote => true,
:method => 'get',
:title => l(:button_reply)) %>
@ -51,7 +51,7 @@
</span>
<%= link_to(
l(:button_delete),
{:controller => 'issues',:action => 'delete_journal', :id => activity.id,:journal_id=>comment.id, :user_activity_id => user_activity_id},
{:controller => 'issues',:action => 'delete_journal', :id => activity.id,:journal_id=>comment.id, :user_activity_id => user_activity_id, :is_project => true},
:method => 'get',
:confirm => l(:text_are_you_sure),
:remote=>true,
@ -81,7 +81,7 @@
<div class="reply-content mb10">
<% if User.current.logged? %>
<div nhname='new_message_<%= user_activity_id %>' style="display:none;">
<%= form_for('new_form',:url => add_journal_issue_path(activity.id, :user_activity_id => user_activity_id),:method => "post", :remote => true) do |f| %>
<%= form_for('new_form',:url => add_journal_issue_path(activity.id, :user_activity_id => user_activity_id, :is_project => true),:method => "post", :remote => true) do |f| %>
<input type="hidden" name="user_activity_id" value="<%=user_activity_id%>">
<div nhname='toolbar_container_<%= user_activity_id%>'></div>
<textarea placeholder="有问题或有建议,请直接给我留言吧!" style="display: none" nhname='new_message_textarea_<%= user_activity_id%>' name="notes"></textarea>

View File

@ -6,11 +6,11 @@
autoUrl('reply_content_<%= comment.id %>');
});
</script>
<li class="homepagePostReplyContainer" nhname="reply_rec">
<li class="reply-container ml15" nhname="reply_rec">
<div class="homepagePostReplyPortrait">
<%= link_to image_tag(url_to_avatar(comment.creator_user), :width => 33, :height => 33, :alt => "用户头像"), user_url_in_org(comment.creator_user.id) %>
</div>
<div class="homepagePostReplyDes" onmouseover="$('#delete_reply_<%=activity_id %>_<%=comment.id %>').show();" onmouseout="$('#delete_reply_<%=activity_id %>_<%=comment.id %>').hide();">
<div class="reply-content ml15" onmouseover="$('#delete_reply_<%=activity_id %>_<%=comment.id %>').show();" onmouseout="$('#delete_reply_<%=activity_id %>_<%=comment.id %>').hide();">
<%= render :partial => 'projects/project_message_contents', :locals => {:comment => comment}%>
<% if !comment.content_detail.blank? %>

View File

@ -0,0 +1,38 @@
<div class="<%= User.current.logged? ? 'orig_reply_box' : 'orig_reply_box2' %> borderBottomNone" id="reply_to_message_<%= reply.id%>">
<% if User.current.logged? %>
<div class="homepagePostReplyPortrait mr15 imageFuzzy" id="reply_image_<%= reply.id%>"><%= link_to image_tag(url_to_avatar(User.current), :width => "33", :height => "33"), user_path(User.current), :alt => "用户头像" %></div>
<div class="orig_textarea mb10 fl">
<div nhname='new_message_<%= reply.id%>'>
<% if @type == 'Message' %>
<%= form_for('new_form',:url => {:controller => 'messages', :action => 'reply', :id => reply.id, :board_id => reply.board.id, :is_project => true}, :method => "post", :remote => true) do |f|%>
<%= hidden_field_tag 'is_course', params[:is_course], :value => @is_course %>
<%= hidden_field_tag 'is_board', params[:is_board], :value => @is_board %>
<%= hidden_field_tag 'parent_id', params[:parent_id], :value => reply.id %>
<%= hidden_field_tag 'activity_id',params[:activity_id],:value =>@activity_id %>
<%= hidden_field_tag 'user_activity_id',params[:user_activity_id],:value =>@user_activity_id %>
<div nhname='toolbar_container_<%= reply.id%>'></div>
<textarea placeholder="有问题或有建议,请直接给我留言吧!" style="display: none" nhname='new_message_textarea_<%= reply.id%>' name="content"></textarea>
<a id="new_message_submit_btn_<%= reply.id%>" href="javascript:void(0)" onclick="this.style.display='none'" class="blue_n_btn fr" style="display:none;margin-top:6px;">发送</a>
<div class="cl"></div>
<p nhname='contentmsg_<%= reply.id%>'></p>
<% end%>
<% elsif @type == 'Issue' %>
<%= form_for('new_form',:url => add_reply_issue_path(reply.issue.id, :is_project => true),:method => "post", :remote => true) do |f|%>
<%= hidden_field_tag 'journal_id',params[:journal_id],:value =>reply.id %>
<%= hidden_field_tag 'user_activity_id',params[:user_activity_id],:value =>@user_activity_id %>
<div nhname='toolbar_container_<%= reply.id%>' ></div>
<textarea placeholder="有问题或有建议,请直接给我留言吧!" style="display: none" nhname='new_message_textarea_<%= reply.id%>' name="content"></textarea>
<a id="new_message_submit_btn_<%= reply.id%>" href="javascript:void(0)" onclick="this.style.display='none'" class="blue_n_btn fr" style="display:none;margin-top:6px;">发送</a>
<div class="cl"></div>
<p nhname='contentmsg_<%= reply.id%>' class="fl"></p>
<% end %>
<% end %>
</div>
<div class="cl"></div>
</div>
<% else %>
<%= render :partial => "users/show_unlogged_reply" %>
<% end %>
<div class="cl"></div>
</div>

View File

@ -1,41 +1,51 @@
<%= form_tag(url_for(:controller => 'pull_requests', :action => 'create', :project_id => @project.id, :forked_project_id => @forked_project.try(:gpid)), :id => 'pull_request_form', :method => "post", :remote => true) do %>
<div class="new-merge-wrap">
<div class="merge-option-name fl mt8"><span class="c_red">*</span>标题</div><input type="text" id="pr_name" name="title" class="merge-title-input fl ml30" />
<p id ="pull_request_title" class="fl ml100 fontGrey2 mt5 c_red" style="display: none">标题不能为空</p>
<div class="cl mb10"></div>
<div class="merge-option-name fl">描述</div><textarea type="text" name="description" class="merge-description-input fl ml30"></textarea>
<!--<p class="fl ml100 f12 mt5"><a href="javascript:void(0);" class="AnnexBtn fl mr10">上传附件</a></p>-->
<div class="cl"></div>
</div>
<div class="new-merge-wrap borderBottomNone">
<div class="merge-option-name fl" style="padding:5px 0">源分支</div>
<%= select_tag :branch, options_for_select(@source_rev), :id => "source_branch", :name => "source_branch", :value => "source_branch", :class => "ml30 fontGrey3 fb fl", :style => "padding:5px 0 5px 5px;" %>
<div class="cl mb10"></div>
<div class="merge-option-name fl" style="padding:5px 0">目标分支</div>
<% if @forked_project.nil? %>
<%= select_tag :branch, options_for_select(@source_rev), :id => "pull_request_branch", :name => "target_branch", :value => "target_branch",:class => "ml30 fontGrey3 fb fl", :style => "padding:5px 0 5px 5px;" %>
<% else %>
<select onchange="choice_branch(this.value, document.getElementById('pull_request_branch'), <%= @source_rev %>, <%= @forked_rev %>);" id="pull_request_project" name="source_project" value="source_project" class="ml30 fontGrey3 fb fl" style = "padding:5px 0 5px 5px;">
<option name="<%= @project.id %>" value="source_project_name" ><%= @source_project_name %></option>
<option name="<%= @forked_project.id %>" value="forked_project_name" ><%= @forked_project_name %></option>
</select>
<select name="target_branch" id="pull_request_branch" class = "ml30 fontGrey3 fb fl" style = "width:140px; padding:5px 0 5px 5px;">
<% @source_rev.each do |rev| %>
<option value="<%= rev %>"><%= rev %></option>
<div class="new_roadmap_conbox mb10" >
<div class="new_roadmap_info_top clear ">
<h4 class=" new_roadmap_listtitle"> 新建Pull Request </h4>
</div>
<%= form_tag(url_for(:controller => 'pull_requests', :action => 'create', :project_id => @project.id, :forked_project_id => @forked_project.try(:gpid)), :id => 'pull_request_form', :method => "post", :remote => true) do %>
<div class="clear new_roadmap_listbox">
<ul class="PullReques_new_box ">
<li class="mb10 clear">
<label class=" fl PullReques_label">&nbsp;源分支&nbsp;&nbsp;:&nbsp;</label>
<%= select_tag :branch, options_for_select(@source_rev), :id => "source_branch", :name => "source_branch", :value => "source_branch", :class => "fl PullReques_minselect" %>
<label class=" fl ml10 ">&nbsp; 合并到目标分支&nbsp;&nbsp;:&nbsp;</label>
<% if @forked_project.nil? %>
<%= select_tag :branch, options_for_select(@source_rev), :id => "pull_request_branch", :name => "target_branch", :value => "target_branch",:class => "fl PullReques_minselect ml5" %>
<% else %>
<select onchange="choice_branch(this.value, document.getElementById('pull_request_branch'), <%= @source_rev %>, <%= @forked_rev %>);" id="pull_request_project" name="source_project" value="source_project" class="fl PullReques_minselect">
<option name="<%= @project.id %>" value="source_project_name" ><%= @source_project_name %></option>
<option name="<%= @forked_project.id %>" value="forked_project_name" ><%= @forked_project_name %></option>
</select>
<select name="target_branch" id="pull_request_branch" class = "fl PullReques_minselect ml5" >
<% @source_rev.each do |rev| %>
<option value="<%= rev %>"><%= rev %></option>
<% end %>
</select>
<% end %>
</select>
<% end %>
<p id="pull_request_project_hidden" style="display: none"><%= @forked_project.nil? ? "" : @project.id %></p>
<div class="cl"></div>
<p id ="pull_request_branch_error" class="ml100 fontGrey2 mt5 c_red" style="display: none">没有内容可以合并,请切换一个不同的分支</p>
<div class="cl"></div>
</div>
<div class="new-merge-row b_grey" style="border-top:1px solid #ddd;">
<a href="javascript:void(0);" class="BlueCirBtn fl ml10" onclick="pull_request_commit()">提交请求</a>
<%= link_to "返回", project_pull_requests_path(:project_id => @project.id), :class => "fr linkGrey2 mt5 mr10" %>
<div class="cl"></div>
</div>
<% end %>
<p id="pull_request_project_hidden" style="display: none"><%= @forked_project.nil? ? "" : @project.id %></p>
</li>
<div class="alert alert-blue mb10" id ="pull_request_branch_error" style="display: none">
<span class="c_orange">您选择的源分支和目标分支为似乎没有差异,请将新改动提交至源分支或者切换到其它目标分支</span>
</div>
<li class="mb10 clear">
<label class=" fl PullReques_label"><span class="c_red f12">*</span>&nbsp;标题&nbsp;&nbsp;:&nbsp;</label>
<input type="text" id="pr_name" name="title" class="fl PullReques_maxinput" placeholder="请输入合并请求的标题" />
</li>
<div class="c_orange pl62 mb4" id ="pull_request_title" style="display: none">
标题不能为空
</div>
<li class=" clear">
<label class=" fl PullReques_label">&nbsp;描述&nbsp;&nbsp;:&nbsp;</label>
<textarea type="text" name="description" class="PullReques_textarea fl mb10" placeholder="在此输入合并请求的描述"></textarea>
</li>
<li class="mb10 clear">
<%= link_to "返回", project_pull_requests_path(:project_id => @project.id), :class => "btn btn-grey fr" %>
<a href="javascript:void(0);" class="btn btn-blue fr mr5" onclick="pull_request_commit()">确定</a>
</li>
</ul>
</div>
<% end %>
</div>
<script>
function regex_pr_name()
@ -74,7 +84,7 @@
//提交pull request
function pull_request_commit()
{
if(regex_pr_name() && regex_branch())
if(regex_branch() && regex_pr_name())
{
$("#pull_request_form").submit();
}

View File

@ -2,15 +2,21 @@
<div class="no-merge-content">没有可显示的请求</div>
<% else %>
<% @requests.each do |request| %>
<li>
<% request %>
<%=link_to request.title, project_pull_request_path(request.id, :project_id => @project.id), :class => "linkGrey3 fb fl hidden", :style => "width:100%;"%>
<!--<a href="javascript:void(0);" class="fr fontGrey2 fb"><img src="/images/comments.png" class="mr5" width="15" />0</a><span class="fr mr15 fb fontGrey2">关闭</span>-->
<div class="cl mb5"></div>
<span class="fontGrey2">由 <%= link_to request.author.try(:username), user_path(get_user_by_login_and(request.author.try(:username))), :class => "link-blue" %> 创建于<%= time_tag(request.created_at) %></span>
<span class="fr fontGrey2"><%= time_tag(request.updated_at) %>更新</span>
<div class="cl"></div>
</li>
<div class="clear new_roadmap_listbox">
<div class="clear">
<span class="icons_pullreques fl "></span>
<h4 class="fl new_roadmap_listtitle"><%=link_to request.title, project_pull_request_path(request.id, :project_id => @project.id) %></h4>
<% if request_commonts_count(request.try(:id), @project.gpid) > 0 %>
<%= link_to request_commonts_count(request.try(:id), @project.gpid), project_pull_request_path(request.id, :project_id => @project.id), :class => "fr mt2" %>
<% end %>
<%= link_to "", project_pull_request_path(request.id, :project_id => @project.id), :class => "issues_icons_mes fr mr5 ml5" %>
</div>
<div class="c_grey clear mt5">
<p class="fl">由 <%= link_to request.author.try(:username), user_path(get_user_by_login_and(request.author.try(:username))), :class => "linkBlue2" %> 创建于<%= time_tag(request.created_at) %>前</p>
<span class="fl ml10"><%= time_tag(request.updated_at) %>前更新</span>
<p class="fr"><%= @project.name+"/"+request.source_branch %><span class="c_grey02 ml10 mr10">合并到</span><%= request.target_branch %></p>
</div>
</div>
<% end %>
<div style="text-align:center;">

View File

@ -1,4 +1,60 @@
<% if @allow_to_pull_request %>
<!--PullReques列表开始-->
<div class="new_roadmap_conbox " >
<div class="new_roadmap_navbox clear">
<ul class="new_roadmap_nav fl" >
<li class="new_roadmap_nav_hover"><%= link_to "待处理<span class='new_roadmap_nav_taghover ml5'>#{@requests_opened_count}</span>".html_safe, project_pull_requests_path(:type => "1"), :remote => true, :class => "new_roadmap_type_nomal" %></li>
<li><%= link_to "已处理<span class='new_roadmap_nav_tagnomal ml5'>#{@requests_merged_count}</span>".html_safe, project_pull_requests_path(:type => "2"), :remote => true, :class => "new_roadmap_type_nomal" %></li>
<li><%= link_to "已关闭<span class='new_roadmap_nav_tagnomal ml5'>#{@requests_closed_count}</span>".html_safe, project_pull_requests_path(:type => "3"), :remote => true, :class => "new_roadmap_type_nomal" %></li>
</ul>
<% if allow_pull_request(@project) && User.current.member_of?(@project) %>
<%= link_to "创建Pull Request", new_project_pull_request_path, :class => "btn btn-green fr mr15 mt10" %>
<% end %>
</div>
<!--<div class="pullreques_category clear ">-->
<!--<a href="javascript:void(0);" class="sortdownbtn mt10 fr mr15"></a>-->
<!--<a href="javascript:void(0);" class="sy_cgrey fr">更新时间</a>-->
<!--<a href="javascript:void(0);" class="sortupbtn mt10 fr"></a>-->
<!--<a href="javascript:void(0);" class="sy_cgrey fr">创建时间 </a>-->
<!--</div>-->
<div id="pull_requests_list">
<%= render "pull_requests/pull_requests_list" %>
<div class=" pages ">
<a href="javascript:void(0);" class="pages-big" >上一页</a>
<a href="javascript:void(0);" class="active " >1</a>
<a href="javascript:void(0);" >2</a>
<a href="javascript:void(0);" >3</a>
<a href="javascript:void(0);" >...</a>
<a href="javascript:void(0);" >31</a>
<a href="javascript:void(0);" class="pages-big" >下一页</a>
<div class="cl"></div>
</div><!--翻页 end-->
<div class="cl"></div>
</div><!--new_roadmap_content_1 end-->
</div><!--new_roadmap end-->
<!--PullReques列表结束-->
<%#= render :partial => "pull_requests/pull_request_container" %>
<ul id="mergeBanner" class="project-merge-banner">
<li class="active"><%= link_to "待处理<span class='project-number-dot'>#{@requests_opened_count}</span>".html_safe, project_pull_requests_path(:type => "1"), :remote => true %></li>
@ -17,12 +73,12 @@
<script>
$("#mergeBanner").parent().css({"width":"730px","background-color":"#fff","padding":"10px","margin-left":"10px","margin-bottom":"10px"});
$("#mergeBanner").parent().before("<div class='homepageRightBanner mb10'><span class='f16 fontGrey3'>Pull Request</span></div>");
// $("#mergeBanner").parent().css({"width":"730px","background-color":"#fff","padding":"10px","margin-left":"10px","margin-bottom":"10px"});
// $("#mergeBanner").parent().before("<div class='homepageRightBanner mb10'><span class='f16 fontGrey3'>Pull Request</span></div>");
$(".project-merge-banner li").click(function(){
$(".project-merge-banner li").removeClass("active");
$(this).addClass("active");
$(".new_roadmap_nav li").click(function(){
$(".new_roadmap_nav li").removeClass("new_roadmap_nav_hover");
$(this).addClass("new_roadmap_nav_hover");
});
</script>
<% else %>

View File

@ -1,3 +1,28 @@
<%= render :partial => "pull_requests/pull_request_container" %>
<%= render :partial => "pull_requests/new" %>
<div id="pull_request_new_form">
<div id="create_pull_request_error">
<%= render :partial => "pull_requests/error_message" %>
</div>
<%= render :partial => "pull_requests/form" %>
</div>
<script>
// $("#pull_request_new_form").parent().css({"width":"730px","background-color":"#fff","padding":"10px","margin-left":"10px","margin-bottom":"10px"});
$("#changed-files").toggle(function(){
$("#changed-files-detail").show();
},function(){
$("#changed-files-detail").hide();
});
$(".merge-record li a").click(function(){
$(".merge-record li a").removeClass("active");
$(this).addClass("active");
var index = $(".merge-record li a").index(this);
$("#merge_record_0, #merge_record_1").hide();
$("#merge_record_" + index).show();
});
</script>

View File

@ -1,10 +1,14 @@
if($("#reply_message_<%= @reply.id%>").length > 0) {
$("#reply_message_<%= @reply.id%>").replaceWith("<%= escape_javascript(render :partial => 'users/reply_to', :locals => {:reply => @reply}) %>");
$("#reply_iconup_<%=@reply.id %>").show();
$(function(){
sd_create_editor_from_data(<%= @reply.id%>,null,"100%", "<%=@reply.class.to_s%>");
});
}else if($("#reply_to_message_<%= @reply.id%>").length >0) {
$("#reply_to_message_<%= @reply.id%>").replaceWith("<p id='reply_message_<%= @reply.id%>'></p>");
$("#reply_iconup_<%=@reply.id %>").hide();
if($("#reply_message_<%= @reply.id%>").length > 0) {
<% if params[:is_project] %>
$("#reply_message_<%= @reply.id%>").replaceWith("<%= escape_javascript(render :partial => 'projects/reply_to', :locals => {:reply => @reply}) %>");
<% else %>
$("#reply_message_<%= @reply.id%>").replaceWith("<%= escape_javascript(render :partial => 'users/reply_to', :locals => {:reply => @reply}) %>");
<% end %>
$("#reply_iconup_<%=@reply.id %>").show();
$(function(){
sd_create_editor_from_data(<%= @reply.id%>,null,"100%", "<%=@reply.class.to_s%>");
});
}else if($("#reply_to_message_<%= @reply.id%>").length >0) {
$("#reply_to_message_<%= @reply.id%>").replaceWith("<p id='reply_message_<%= @reply.id%>'></p>");
$("#reply_iconup_<%=@reply.id %>").hide();
}

View File

@ -0,0 +1,36 @@
<% @versions.each do |version| %>
<div class="clear new_roadmap_listbox">
<div class="clear">
<h4 class="fl new_roadmap_listtitle"><%= link_to_version version, :name => version_anchor(version) %></h4><span class="fl <%= get_version_type(version.status) %> mt3 ml5"></span>
<%= link_to "导出", version_path(version, :format => 'xls'), :class => "btn_newpro_grey fr" %>
<a href="javascript:void(0);" class="roadmap_icons_del fr mt5 mr5" alt="删除"></a>
<a href="javascript:void(0);" class="roadmap_icons_edit fr mt5 " alt="编辑"></a>
</div>
<ul class="new_roadmap_list_txt clear mb5">
<li>完成 <span class="ml5 c_red" title="<%= version.closed_percent %>"><%= version.closed_percent.round %>% </span></li>
<li>Issues<span class="ml5 "><%= version.issues_count %> </span></li>
<li>已关闭<span class="ml5 "><%= version.closed_issues_count %> </span></li>
<li>
<% if version.completed? %>
<span></span><%= format_date(version.effective_date) %>
<% elsif version.effective_date %>
<span class="muban-icons-clock"></span><%= due_date_distance_in_words(version.effective_date) %>(<%= format_date(version.effective_date) %>)
<% end %>
<!--<span ></span>截止日期剩余 5天(2016-10-31)</li>-->
</ul>
<div class="c_grey">
<p><%= version.description %></p>
</div>
</div>
<% end %>
<div style="text-align:center;">
<div class="pages" style="width:auto; display:inline-block;">
<ul id="homework_pository_ref_pages">
<%= pagination_links_full @version_pages, @versions_count, :per_page_links => false, :remote => @is_remote, :flag => true, :is_new => true %>
</ul>
<div class="cl"></div>
</div>
</div>
<div class="cl"></div>

View File

@ -1,78 +1,34 @@
<div class="project_r_h" style="width:730px;">
<h2 class="project_h2"><%= l(:label_roadmap) %></h2>
</div>
<div class="roadmap">
<fieldset id="filters" class="collapsible collapsed" >
<legend><%= l(:label_version_display_settings)%></legend>
<%= form_tag({}, :method => :get) do %>
<% @trackers.each do |tracker| %>
<label><%= check_box_tag "tracker_ids[]", tracker.id, (@selected_tracker_ids.include? tracker.id.to_s), :id => nil %>
<%=h tracker.name %></label>
<% end %>
<!--label for="completed"><%#= check_box_tag "completed", 1, params[:completed] %> <%#= l(:label_show_completed_versions) %></label-->
<% if @project.descendants.active.any? %>
<%= hidden_field_tag 'with_subprojects', 0 %>
<label><%= check_box_tag 'with_subprojects', 1, @with_subprojects %> <%=l(:label_subproject_plural)%></label>
<% end %>
<%= submit_tag l(:button_apply), :class => 'sub_btn ml10', :name => nil %>
<%= link_to l(:label_version_new), new_project_version_path(@project), :class => 'green_u_btn fr' if User.current.allowed_to?(:manage_versions, @project) %>
<% end %>
</fieldset>
<% if @versions.empty? %>
<p class="nodata mt10"><%= l(:label_no_data) %></p>
<% else %>
<% @versions.each do |version| %>
<div class="roadmap_box" style="width:710px;">
<p><a class=" f16 fb c_dblue ">
<a class=" f16 fb c_dblue " ><%= version_anchor(version)%></a>
<%#= link_to_version_show version, :name => version_anchor(version) %>
<% if version.completed? %>
<span style="color: #E8770D;float:right;"><%= format_date(version.effective_date) %></span>
<% elsif version.effective_date %>
<span style="color: #E8770D;float:right;"><strong><%= due_date_distance_in_words(version.effective_date) %></strong> (<%= format_date(version.effective_date) %>)</span>
<% end %>
</a>
</p>
<div class="roadmap_pro mb10">
<%= render :partial => 'versions/overview', :locals => {:version => version} %>
<%#= render(:partial => "wiki/content", :locals => {:content => version.wiki_page.content}) if version.wiki_page %>
</div><!--roadmap_pro end-->
<% if (issues = @issues_by_version[version]) && issues.size > 0 %>
<div class="roadmap_list">
<%= form_tag({}) do -%>
<p class="f14 mb5">&#187;<%= l(:label_related_issues) %></p>
<ul class="roadmap_list_ul">
<% issues.each do |issue| -%>
<li style="overflow:hidden">
<%= link_to_issue_version(issue, :project => (@project != issue.project)) %>
<span class="mr5 fr" >指派给:<%= link_to "#{User.find(issue.try(:assigned_to_id)).show_name}", user_path(issue.try(:assigned_to_id)), :class => "c_blue hidden fr", :style => "width:50px;" %></span>
</li>
<% end -%>
</ul>
<% end %>
</div>
<% end %><!--roadmap_list end-->
<div class="roadmap_list">
<p class="f14 mb5">&#187;<%= l(:label_versions_description)%></p>
<p><%=h version.description %></p>
<!--p class="f14 mb5">&#187;<%#= link_to "导出Excel", version_path(version, :format => 'xls') %></p-->
</div><!--roadmap_list end-->
</div><!--roadmap_box end-->
<% end %>
<ul class="wlist" >
<%= pagination_links_full @versions_pages%>
</ul>
<div class="cl"></div>
<% end %>
</div><!--roadmap end-->
<!--里程碑列表开始-->
<div class="new_roadmap_conbox mb10" >
<div class="new_roadmap_navbox clear">
<ul class="new_roadmap_nav fl" >
<li class="new_roadmap_nav_hover">
<%= link_to "所有<span class='new_roadmap_nav_taghover ml5'>#{@versions_count}</span>".html_safe, project_roadmap_path(@project, :type => "1"), :remote => true, :class => "new_roadmap_type_nomal", :id => "new_roadmap_type_1" %>
</li>
<li>
<%= link_to "打开<span class='new_roadmap_nav_taghover ml5'>#{@versions_open_count}</span>".html_safe, project_roadmap_path(@project, :type => "2"), :remote => true, :class => "new_roadmap_type_nomal", :id => "new_roadmap_type_1" %>
</li>
<li>
<%= link_to "锁定<span class='new_roadmap_nav_taghover ml5'>#{@versions_locked_count}</span>".html_safe, project_roadmap_path(@project, :type => "3"), :remote => true, :class => "new_roadmap_type_nomal", :id => "new_roadmap_type_1" %>
</li>
<li>
<%= link_to "关闭<span class='new_roadmap_nav_taghover ml5'>#{@versions_closed_count}</span>".html_safe, project_roadmap_path(@project, :type => "4"), :remote => true, :class => "new_roadmap_type_nomal", :id => "new_roadmap_type_1" %>
</li>
</ul>
<a href="javascript:void(0);" class="btn btn-green fr mr15 mt10"> 新建 </a>
</div>
<div id="version_list">
<%= render :partial => "versions/list" %>
</div>
</div><!--new_roadmap end-->
<!--里程碑列表结束-->
<% html_title(l(:label_roadmap)) %>
<%= context_menu issues_context_menu_path %>
<script>
$(".project_r_h").parent().css({"width":"730px","background-color":"#fff","padding":"10px","margin-left":"10px","margin-bottom":"10px"});
</script>
<script type="text/javascript" language="javascript">
$(".new_roadmap_nav li").click(function(){
$(".new_roadmap_nav li").removeClass("new_roadmap_nav_hover");
$(this).addClass("new_roadmap_nav_hover");
});
</script>

View File

@ -0,0 +1,2 @@
$("#version_list").html('<%= escape_javascript(render :partial => 'list') %>');
$("#pages").html('<%= pagination_links_full @version_pages, @versions_count, :per_page_links => false, :remote => @is_remote, :flag => true, :is_new => true %>');

View File

@ -545,6 +545,7 @@ RedmineApp::Application.routes.draw do
get '/projects/:project_id/issues/calendar', :to => 'calendars#show', :as => 'project_calendar'
get '/issues/calendar', :to => 'calendars#show'
get 'projects/:id/issues/statistics', :to => 'issues#statistics', :as => 'project_issues_statistics'
get 'projects/:id/issues/report', :to => 'reports#issue_report', :as => 'project_issues_report'
get 'projects/:id/issues/report/:detail', :to => 'reports#issue_report_details', :as => 'project_issues_report_details'
post '/users/:id/user_activities', :to => 'users#show', :as => "user_activities"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 201 KiB

After

Width:  |  Height:  |  Size: 205 KiB

View File

@ -2175,3 +2175,27 @@ function autoHeight(id, baseheight) {
});
};
function getIssueStatistics(url){
var tracker_id = $("#tracker_id").attr("value");
var subject = $("#v_subject").attr("value");
var assigned_to_id = $("#assigned_to_id").attr("value");
var fixed_version_id = $("#fixed_version_id").attr("value");
var status_id = $("#status_id").attr("value");
var done_ratio = $("#done_ratio").attr("value");
var test = $("#test").attr("value");
var author_id = $("#author_id").attr("value");
var priority_id = $("#priority_id").attr("value");
var issue_create_date_start = $("#issue_date_start_issue_export").attr("value");
var issue_create_date_end = $("#issue_date_end_issue_export").attr("value");
$.ajax({
url: url,
type: 'get',
data: {tracker_id: tracker_id,subject:subject,assigned_to_id:assigned_to_id, fixed_version_id:fixed_version_id, status_id:status_id,done_ratio:done_ratio,test:test,author_id:author_id,priority_id:priority_id,issue_create_date_start:issue_create_date_start,issue_create_date_end:issue_create_date_end},
success: function(data){ },
beforeSend: function(){ },
complete: function(){}
});
}

View File

@ -214,6 +214,7 @@ h4{ font-size:14px;}/*color:#3b3b3b;*/
.pl10 {padding-left:10px;}
.pr5 {padding-right:5px;}
.pr10{padding-right: 10px;}
.pl62 {padding-left: 62px;}
.pl15{ padding-left:15px;}
.pt5{ padding-top:5px;}
.pt10{ padding-top:10px;}
@ -233,6 +234,7 @@ h4{ font-size:14px;}/*color:#3b3b3b;*/
.w108 {width:108px;}
.w125{width:125px;}
.w128{ width:128px;}
.w130{ width:130px;}
.w140{ width:140px;}
.w150{ width:150px;}
.w170{width:170px;}

View File

@ -768,9 +768,9 @@ input.issues_calendar_input{ padding-left:5px; color:#444; border-right:none;}
a.issues_list_title{ color:#444; max-width:380px; overflow:hidden; text-overflow:ellipsis; -o-text-overflow:ellipsis; white-space:nowrap; }
a:hover.issues_list_title{color:#3b94d6;}
.issues_list_titlebox span{ font-size: 12px;color: #888; font-weight: normal; }
.issues_ciricons_01{ width: 22px; height: 22px; display: inline-block; background: url("../images/project/icons_issue.png") 0 0 no-repeat;}
.issues_ciricons_02{ width: 22px; height: 22px; display: inline-block; background: url("../images/project/icons_issue.png") 0 -30px no-repeat;}
.issues_icons_mes{width: 17px; height: 17px; display: inline-block; background: url("../images/project/icons_issue.png") 0 -57px no-repeat; }
.issues_ciricons_01{ width: 22px; height: 22px; display: inline-block; background: url("/images/new_project/icons_issue.png") 0 0 no-repeat;}
.issues_ciricons_02{ width: 22px; height: 22px; display: inline-block; background: url("/images/new_project/icons_issue.png") 0 -30px no-repeat;}
.issues_icons_mes{width: 17px; height: 17px; display: inline-block; background: url("/images/new_project/icons_issue.png") 0 -57px no-repeat; }
.issues_list_name{ font-size: 12px;}
.issues_list_name:hover{ color: #3b94d6;}
.issues_list_small{ font-size: 12px; color: #666;}
@ -970,4 +970,43 @@ select.new_roadmap_select{border:1px solid #dbdbdb; color: #666;}
.new_roadmap_table tbody tr td{ height:40px; line-height:40px; border-bottom:1px solid #e5e5e5; color:#888;}
.new_roadmap_table td{ padding:0 5px;}
/*模板图标20161020byLB*/
.muban-icons-clock{ background: url("/images/new_project/icons_issue.png") 0 -224px no-repeat; display: inline-block; width: 19px; height: 13px;}
.muban-icons-clock{ background: url("/images/new_project/icons_issue.png") 0 -224px no-repeat; display: inline-block; width: 19px; height: 13px;}
/* pullreques 20161020byLB */
.pullreques_category{ height: 35px; line-height: 35px;background: #f0f0f0; }
.pullreques span{ float: left;}
a.sortupbtn{ background: url(/images/sy/liststyle.png) 0 3px no-repeat;width:12px;height:17px; display:block; margin-right:10px; cursor:pointer;}
a.sortdownbtn{background: url(/images/sy/liststyle.png) 0 -12px no-repeat; width:12px; height:17px;display:block;cursor:pointer; }
.icons_pullreques{background: url(/images/new_project/icons_issue.png) 0 -270px no-repeat; display: inline-block; width: 25px; height: 25px;}
.pullreques_blueicon{ background: url(/images/new_project/icons_issue.png) 0 -299px no-repeat; display: inline-block; width: 43px; height: 16px;}
.pullreques_greyicon{ background: url(/images/new_project/icons_issue.png) 0 -322px no-repeat; display: inline-block; width: 43px; height: 16px;}
.pullreques_greyicon02{ background: url(/images/new_project/icons_issue.png) 0 -344px no-repeat; display: inline-block; width:32px; height: 16px;}
.pullreques_reply_textarea{ width: 100%; padding:0; height: 60px; color: #666;}
.pullreques_reply_list li{ padding:15px 0; border-top: 1px dashed #ddd; }
.pullreques_reply_user_img{ width:50px;height:50px; -webkit-border-radius:50px;-moz-border-radius:50px;-o-border-radius:50px;border-radius:50px;}
a.pullreques_reply_name{ font-weight: bold; color: #333;}
.pullreques_reply_txt{ width: 900px;color: #666;}
.pullreques_pull_top { width: 100%; height: 40px; line-height: 40px; background: #f4f4f4; border-top:1px solid #e1e1e1;border-bottom:1px solid #e1e1e1;}
a.pullreques_pull_name{display: block; margin-left: 10px;max-width:80px; color:#3b94d6; overflow:hidden;white-space: nowrap; text-overflow:ellipsis;}
.pullreques_pull_list li{ height: 30px; line-height: 30px; }
.pullreques_pull_txt{display: block; margin-left: 10px;max-width:740px; overflow:hidden;white-space: nowrap; text-overflow:ellipsis;}
.pullreques_change_list li{height: 40px; line-height: 40px;border-bottom:1px solid #e1e1e1; }
.pullreques_change_list li:last-child{ border-bottom: none;}
.pullreques_icons_add{background: url(/images/new_project/icons_issue.png) 0 -374px no-repeat; display: inline-block; width: 19px; height: 16px;}
.pullreques_icons_del{background: url(/images/new_project/icons_issue.png) 0 -399px no-repeat; display: inline-block; width: 19px; height: 16px;}
.pullreques_icons_new{background: url(/images/new_project/icons_issue.png) 0 -421px no-repeat; display: inline-block; width: 19px; height: 16px;}
.PullReques_minselect{border:1px solid #e1e1e1; height: 30px; line-height: 30px; width: 262px;color: #666;}
.PullReques_maxinput{ width:900px;border:1px solid #e1e1e1; height: 30px; line-height: 30px; color: #666;}
.PullReques_textarea{width:900px;border:1px solid #e1e1e1; height: 80px; line-height: 1.9; color: #666;}
.PullReques_new_box li{ height: 30px; line-height: 30px; color: #666;}
.PullReques_label{ width: 60px; text-align: right;}
.PullReques_new_box input:focus,select:focus{border:1px solid #e1e1e1;}
/*模板form 20161013byLB*/
textarea.muban_textarea{ width: 98.5%;border:1px solid #ddd; background:#fff; color:#666; padding:5px;}
/*提示条20161020byLB*/
.alert{ padding:10px;border: 1px solid transparent; text-align: center;}
.alert-blue{ background-color: #d9edf7;border-color: #bce8f1; color: #3a87ad;}
.alert-orange{ background-color: #fff9e9;border-color: #f6d0b1; color:#ee4a20;}
.close{padding: 0;cursor: pointer; background: transparent; border: 0; -webkit-appearance: none; font-size: 21px; font-weight: bold;line-height: 1; color: #000000; text-shadow: 0 1px 0 #ffffff; opacity: 0.3;}
.close:hover{opacity: 0.5;}

View File

@ -1156,7 +1156,7 @@ input.new_loggin_input{
margin-top:250px;
}
/*未登录回复提示*/
.visitor-box {width:620px; height:33px; line-height:33px; text-align:center; vertical-align: middle; border:1px solid #ccc; background-color: #fff;}
.visitor-box {height:33px; line-height:33px; text-align:center; vertical-align: middle; border:1px solid #ccc; background-color: #fff;}
/* 个人资料修改弹框 */
.winbox{

View File

@ -142,6 +142,7 @@ h4{ font-size:14px; }
.mb20{ margin-bottom:20px;}
.mb30 {margin-bottom:30px;}
.mb40 {margin-bottom:40px;}
.pl62 {padding-left: 62px;}
.pl10 {padding-left:10px;}
.pl15{ padding-left:15px;}
.pl5{ padding-left:5px;}