[ADD]后台审核特殊许可申请
This commit is contained in:
parent
9eb7219b9a
commit
6c436dd631
|
@ -1171,9 +1171,9 @@ http://localhost:3000/api/projects | jq
|
||||||
|language |object|项目语言|
|
|language |object|项目语言|
|
||||||
|-- id |int|项目语言id|
|
|-- id |int|项目语言id|
|
||||||
|-- name |string|项目语言名称|
|
|-- name |string|项目语言名称|
|
||||||
|user_apply_signatures |object|用户申请的项目签名|
|
|user_apply_signatures |object|用户创建的特殊许可申请|
|
||||||
|-- id |int|用户申请的项目签名id|
|
|-- id |int|用户创建的特殊许可申请id|
|
||||||
|-- status |int|用户申请的项目签名审核状态, 0: 正在审核,1:已审核|
|
|-- status |int|用户创建的特殊许可申请审核状态, 'unpassed': 审核未通过,'waiting': 等待审核 'passed':审核通过|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -1208,7 +1208,7 @@ http://localhost:3000/api/projects | jq
|
||||||
"user_apply_signatures":[
|
"user_apply_signatures":[
|
||||||
{
|
{
|
||||||
"id": 1,
|
"id": 1,
|
||||||
"status": 0
|
"status": "waiting"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
@ -4015,9 +4015,9 @@ http://localhost:3000/api/users/Jason/projects.json | jq
|
||||||
|language |object|项目语言|
|
|language |object|项目语言|
|
||||||
|-- id |int|项目语言id|
|
|-- id |int|项目语言id|
|
||||||
|-- name |string|项目语言名称|
|
|-- name |string|项目语言名称|
|
||||||
|user_apply_signatures |object|用户申请的项目签名|
|
|user_apply_signatures |object|用户创建的特殊许可申请|
|
||||||
|-- id |int|用户申请的项目签名id|
|
|-- id |int|用户创建的特殊许可申请id|
|
||||||
|-- status |int|用户申请的项目签名审核状态, 0: 正在审核,1:已审核|
|
|-- status |int|用户创建的特殊许可申请审核状态, 'unpassed': 审核未通过,'waiting': 等待审核 'passed':审核通过|
|
||||||
|
|
||||||
返回值
|
返回值
|
||||||
```json
|
```json
|
||||||
|
@ -4050,7 +4050,7 @@ http://localhost:3000/api/users/Jason/projects.json | jq
|
||||||
"user_apply_signatures":[
|
"user_apply_signatures":[
|
||||||
{
|
{
|
||||||
"id": 1,
|
"id": 1,
|
||||||
"status": 0
|
"status": "waiting"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@ -4091,7 +4091,7 @@ http://localhost:3000/api/apply_signatures.json | jq
|
||||||
{
|
{
|
||||||
"id": 5,
|
"id": 5,
|
||||||
"attachment": {
|
"attachment": {
|
||||||
"name": "timg.jpeg"
|
"filename": "timg.jpeg"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
class Admins::ApplySignaturesController < Admins::BaseController
|
||||||
|
|
||||||
|
def index
|
||||||
|
sort_by = params[:sort_by] ||= 'created_on'
|
||||||
|
sort_direction = params[:sort_direction] ||= 'desc'
|
||||||
|
|
||||||
|
@apply_signatures = paginate ApplySignature.waiting.includes(:attachments)
|
||||||
|
end
|
||||||
|
|
||||||
|
def update
|
||||||
|
ActiveRecord::Base.transaction do
|
||||||
|
begin
|
||||||
|
apply_signature = ApplySignature.find_by!(id: params[:id])
|
||||||
|
apply_signature.update_attributes!(apply_signatures_params)
|
||||||
|
Projects::AddMemberInteractor.call(apply_signature.project.owner, apply_signature.project, apply_signature.user, "write", true)
|
||||||
|
redirect_to admins_apply_signatures_path
|
||||||
|
flash[:success] = "更新成功"
|
||||||
|
rescue => e
|
||||||
|
raise ActiveRecord::Rollback
|
||||||
|
redirect_to admins_apply_signatures_path
|
||||||
|
flash[:danger] = "更新失败"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
def apply_signatures_params
|
||||||
|
params.permit(:status)
|
||||||
|
end
|
||||||
|
end
|
|
@ -1,18 +1,19 @@
|
||||||
module Projects
|
module Projects
|
||||||
class AddMemberInteractor
|
class AddMemberInteractor
|
||||||
def self.call(owner, project, collaborator, permission="write")
|
def self.call(owner, project, collaborator, permission="write", is_apply_signature=false)
|
||||||
interactor = new(owner, project, collaborator, permission)
|
interactor = new(owner, project, collaborator, permission, is_apply_signature)
|
||||||
interactor.run
|
interactor.run
|
||||||
interactor
|
interactor
|
||||||
end
|
end
|
||||||
|
|
||||||
attr_reader :error, :result
|
attr_reader :error, :result
|
||||||
|
|
||||||
def initialize(owner, project, collaborator, permission)
|
def initialize(owner, project, collaborator, permission, is_apply_signature)
|
||||||
@owner = owner
|
@owner = owner
|
||||||
@project = project
|
@project = project
|
||||||
@collaborator = collaborator
|
@collaborator = collaborator
|
||||||
@permission = permission
|
@permission = permission
|
||||||
|
@is_apply_signature = is_apply_signature
|
||||||
end
|
end
|
||||||
|
|
||||||
def success?
|
def success?
|
||||||
|
@ -23,7 +24,7 @@ module Projects
|
||||||
ActiveRecord::Base.transaction do
|
ActiveRecord::Base.transaction do
|
||||||
gitea_result = Gitea::Repository::Members::AddService.new(owner, project.identifier, collaborator.login, permission).call
|
gitea_result = Gitea::Repository::Members::AddService.new(owner, project.identifier, collaborator.login, permission).call
|
||||||
if gitea_result.status == 204
|
if gitea_result.status == 204
|
||||||
project.add_member!(collaborator.id)
|
project.add_member!(collaborator.id, 'Developer', is_apply_signature)
|
||||||
end
|
end
|
||||||
fail!(nil)
|
fail!(nil)
|
||||||
end
|
end
|
||||||
|
@ -32,7 +33,7 @@ module Projects
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
attr_reader :owner, :project, :collaborator, :permission
|
attr_reader :owner, :project, :collaborator, :permission, :is_apply_signature
|
||||||
|
|
||||||
def fail!(error)
|
def fail!(error)
|
||||||
@error = error
|
@error = error
|
||||||
|
|
|
@ -2,5 +2,9 @@ class ApplySignature < ApplicationRecord
|
||||||
belongs_to :user
|
belongs_to :user
|
||||||
belongs_to :project
|
belongs_to :project
|
||||||
|
|
||||||
|
has_many :attachments, as: :container, dependent: :destroy
|
||||||
|
|
||||||
scope :with_user_id, -> (user_id) {where(user_id: user_id)}
|
scope :with_user_id, -> (user_id) {where(user_id: user_id)}
|
||||||
|
|
||||||
|
enum status: {unpassed: -1, waiting: 0, passed: 1}
|
||||||
end
|
end
|
||||||
|
|
|
@ -10,8 +10,8 @@ module ProjectOperable
|
||||||
has_many :writable_members, -> { joins(:roles).where.not(roles: {name: 'Reporter'}) }, class_name: 'Member'
|
has_many :writable_members, -> { joins(:roles).where.not(roles: {name: 'Reporter'}) }, class_name: 'Member'
|
||||||
end
|
end
|
||||||
|
|
||||||
def add_member!(user_id, role_name='Developer')
|
def add_member!(user_id, role_name='Developer', is_apply_signature=false)
|
||||||
member = members.create!(user_id: user_id)
|
member = members.create!(user_id: user_id, is_apply_signature: is_apply_signature)
|
||||||
set_developer_role(member)
|
set_developer_role(member)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
<% define_admin_breadcrumbs do %>
|
||||||
|
<% add_admin_breadcrumb('特殊许可申请列表') %>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
|
<div class="box admin-list-container apply_signatures-list-container">
|
||||||
|
<%= render partial: 'admins/apply_signatures/shared/list', locals: { apply_signatures: @apply_signatures } %>
|
||||||
|
</div>
|
|
@ -0,0 +1,42 @@
|
||||||
|
<table class="table table-hover text-center subject-list-table">
|
||||||
|
<thead class="thead-light">
|
||||||
|
<tr>
|
||||||
|
<th width="10%">序号</th>
|
||||||
|
<th width="20%" class="text-left">项目名称</th>
|
||||||
|
<th width="20%">申请人</th>
|
||||||
|
<th width="25%">申请材料</th>
|
||||||
|
<th width="25%">操作</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<% if apply_signatures.present? %>
|
||||||
|
<% apply_signatures.each_with_index do |signature, index| %>
|
||||||
|
<tr class="sinature-item-<%= signature.id %>">
|
||||||
|
<td><%= list_index_no((params[:page] || 1).to_i, index) %></td>
|
||||||
|
<td class="text-left">
|
||||||
|
<%= link_to(signature&.project&.name, "/projects/#{signature&.project&.owner.login}/#{signature&.project&.identifier}", target: '_blank') %>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<%= link_to(signature&.user&.real_name, "/users/#{signature&.user&.login}", target: '_blank') %>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<% if signature.attachments.present? %>
|
||||||
|
<% signature.attachments.each do |attachment|%>
|
||||||
|
<%= image_tag("/api/attachments/#{attachment.id}", width: 40, height: 40, class: 'preview-image auth-image', data: { toggle: 'tooltip', title: '点击预览' }) %>
|
||||||
|
<% end %>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
|
</td>
|
||||||
|
<td class="action-container">
|
||||||
|
<%= link_to "同意", admins_apply_signature_path(signature.id, status: 1), method: :patch, class: "delete-project-action" %>
|
||||||
|
<%= link_to "拒绝", admins_apply_signature_path(signature.id, status: -1), method: :patch, class: "delete-project-action" %>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<% end %>
|
||||||
|
<% else %>
|
||||||
|
<%= render 'admins/shared/no_data_for_table' %>
|
||||||
|
<% end %>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<%= render partial: 'admins/shared/paginate', locals: { objects: apply_signatures } %>
|
|
@ -5,6 +5,7 @@
|
||||||
<th width="4%">ID</th>
|
<th width="4%">ID</th>
|
||||||
<th width="15%" class="text-left">项目名称</th>
|
<th width="15%" class="text-left">项目名称</th>
|
||||||
<th width="6%">公开</th>
|
<th width="6%">公开</th>
|
||||||
|
<th width="6%">特殊协议</th>
|
||||||
<th width="5%">issue</th>
|
<th width="5%">issue</th>
|
||||||
<th width="5%">资源</th>
|
<th width="5%">资源</th>
|
||||||
<th width="6%">版本库</th>
|
<th width="6%">版本库</th>
|
||||||
|
@ -26,6 +27,7 @@
|
||||||
<%= link_to(project.name, "/projects/#{project.owner.login}/#{project.identifier}", target: '_blank') %>
|
<%= link_to(project.name, "/projects/#{project.owner.login}/#{project.identifier}", target: '_blank') %>
|
||||||
</td>
|
</td>
|
||||||
<td><%= project.is_public ? '√' : '' %></td>
|
<td><%= project.is_public ? '√' : '' %></td>
|
||||||
|
<td><%= project.is_secret ? '√' : '' %></td>
|
||||||
<td><%= project.issues.size %></td>
|
<td><%= project.issues.size %></td>
|
||||||
<td><%= project.attachments.size %></td>
|
<td><%= project.attachments.size %></td>
|
||||||
<td><%= project&.project_score.try(:changeset_num).to_i %></td>
|
<td><%= project&.project_score.try(:changeset_num).to_i %></td>
|
||||||
|
|
|
@ -26,6 +26,8 @@
|
||||||
<li><%= sidebar_item(admins_project_categories_path, '分类列表', icon: 'sitemap', controller: 'admins-project_categories') %></li>
|
<li><%= sidebar_item(admins_project_categories_path, '分类列表', icon: 'sitemap', controller: 'admins-project_categories') %></li>
|
||||||
<li><%= sidebar_item(admins_project_licenses_path, '开源许可证', icon: 'file-text-o', controller: 'admins-project_licenses') %></li>
|
<li><%= sidebar_item(admins_project_licenses_path, '开源许可证', icon: 'file-text-o', controller: 'admins-project_licenses') %></li>
|
||||||
<li><%= sidebar_item(admins_project_ignores_path, '忽略文件', icon: 'git', controller: 'admins-project_ignores') %></li>
|
<li><%= sidebar_item(admins_project_ignores_path, '忽略文件', icon: 'git', controller: 'admins-project_ignores') %></li>
|
||||||
|
<li><%= sidebar_item(admins_apply_signatures_path, '特殊许可申请列表', icon: 'git', controller: 'admins-apply_signatures') %></li>
|
||||||
|
|
||||||
<% end %>
|
<% end %>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
json.id @signature.id
|
json.id @signature.id
|
||||||
json.attachment do
|
json.attachment do
|
||||||
json.name @attachment.filename
|
json.filename @attachment.filename
|
||||||
end
|
end
|
||||||
|
|
|
@ -5,5 +5,6 @@ json.members @members do |member|
|
||||||
json.is_owner @project.owner?(member.user)
|
json.is_owner @project.owner?(member.user)
|
||||||
json.role member.roles.last.name
|
json.role member.roles.last.name
|
||||||
json.role_name t("roles.#{member.roles.last.name}")
|
json.role_name t("roles.#{member.roles.last.name}")
|
||||||
|
json.is_apply_signature member.is_apply_signature
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,18 +1,5 @@
|
||||||
# json.array! @category_group_list do |category,v|
|
json.array! @project_categories do |category|
|
||||||
# json.id category[0]
|
json.id category.id
|
||||||
# json.name category[1]
|
json.name category.name
|
||||||
# json.projects_count v
|
json.projects_count category.projects_count
|
||||||
# end
|
|
||||||
|
|
||||||
json.array! @category_group_list do |k,v|
|
|
||||||
children_category = @project_children_categories.get_children(v)
|
|
||||||
json.children do
|
|
||||||
json.array! children_category do |cate|
|
|
||||||
json.id cate[0]
|
|
||||||
json.name cate[1]
|
|
||||||
json.parent_id v
|
|
||||||
end
|
|
||||||
end
|
|
||||||
json.id v
|
|
||||||
json.name k.to_s
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -772,6 +772,7 @@ Rails.application.routes.draw do
|
||||||
resources :salesman_customers, only: [:index, :create, :edit, :update, :destroy] do
|
resources :salesman_customers, only: [:index, :create, :edit, :update, :destroy] do
|
||||||
post :batch_add, on: :collection
|
post :batch_add, on: :collection
|
||||||
end
|
end
|
||||||
|
resources :apply_signatures, only: [:index, :update]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue