diff --git a/app/views/cooperative/competition_prize_users/approve.js.erb b/app/views/cooperative/competition_prize_users/approve.js.erb
new file mode 100644
index 000000000..e4e82b38d
--- /dev/null
+++ b/app/views/cooperative/competition_prize_users/approve.js.erb
@@ -0,0 +1 @@
+$('.competition-prize-user-list-container .competition-prize-user-item-<%= @prize_user.id %>').html("<%= j( render partial: 'cooperative/competition_prize_users/shared/tr', locals: { prize_user: @prize_user } ) %>");
\ No newline at end of file
diff --git a/app/views/cooperative/competition_prize_users/index.html.erb b/app/views/cooperative/competition_prize_users/index.html.erb
new file mode 100644
index 000000000..63f93285c
--- /dev/null
+++ b/app/views/cooperative/competition_prize_users/index.html.erb
@@ -0,0 +1,64 @@
+<%
+ define_breadcrumbs do
+ add_breadcrumb('竞赛列表', cooperative_competitions_path)
+ add_breadcrumb(@competition.name)
+ end
+%>
+
+
+
+
+ <%= render(partial: 'cooperative/competition_prize_users/shared/list', locals: { prize_users: @prize_users }) %>
+
\ No newline at end of file
diff --git a/app/views/cooperative/competition_prize_users/index.js.erb b/app/views/cooperative/competition_prize_users/index.js.erb
new file mode 100644
index 000000000..2da7635c0
--- /dev/null
+++ b/app/views/cooperative/competition_prize_users/index.js.erb
@@ -0,0 +1 @@
+$('.competition-prize-user-list-container').html("<%= j( render partial: 'cooperative/competition_prize_users/shared/list', locals: { prize_users: @prize_users } ) %>");
\ No newline at end of file
diff --git a/app/views/cooperative/competition_prize_users/index.xlsx.axlsx b/app/views/cooperative/competition_prize_users/index.xlsx.axlsx
new file mode 100644
index 000000000..63e23a214
--- /dev/null
+++ b/app/views/cooperative/competition_prize_users/index.xlsx.axlsx
@@ -0,0 +1,33 @@
+wb = xlsx_package.workbook
+
+wb.styles do |s|
+ blue_cell = s.add_style :bg_color => "FAEBDC", :sz => 10,:height => 25,:b => true, :border => { :style => :thin, :color =>"000000" },:alignment => {wrap_text: true,:horizontal => :center,:vertical => :center}
+ wb.add_worksheet(name: "#{@competition.name}证书审批列表") do |sheet|
+ sheet.add_row %w(序号 排名 奖项 战队ID 战队名称 姓名 职业 学号 学校名称 学院名称 地区 实名认证 职业认证 手机号码 队长 签领/开户行及银行卡号 审批时间 审批人), :height => 25,:style => blue_cell
+
+ @all_prize_users.each_with_index do |prize_user, index|
+ user = prize_user.user
+ data = [
+ index + 1,
+ prize_user.rank,
+ prize_user.competition_prize.name,
+ prize_user.competition_team_id,
+ prize_user.competition_team.name,
+ user.real_name,
+ user.identity,
+ user.student_id,
+ user.school_name,
+ user.department_name,
+ user.location,
+ user.auth_status,
+ user.pro_status,
+ user.phone,
+ prize_user.leader? ? "是" : "-",
+ [prize_user.extra&.[]('bank'), prize_user.extra&.[]('second_bank'), prize_user.extra&.[]('card_no')].compact.join('/'),
+ prize_user.approved_at&.strftime('%Y-%m-%d %H:%M'),
+ prize_user.approver&.real_name
+ ]
+ sheet.add_row(data)
+ end
+ end
+end
diff --git a/app/views/cooperative/competition_prize_users/shared/_list.html.erb b/app/views/cooperative/competition_prize_users/shared/_list.html.erb
new file mode 100644
index 000000000..ecd3d167d
--- /dev/null
+++ b/app/views/cooperative/competition_prize_users/shared/_list.html.erb
@@ -0,0 +1,33 @@
+
+
+
+ 奖项
+ 排名
+ 战队名称
+ 真实姓名
+ 职业
+ 学号
+ 单位
+ 实名
+ 职业
+ 手机
+ 队长
+ 审批时间
+ 审批人
+ 操作
+
+
+
+ <% if prize_users.present? %>
+ <% prize_users.each do |prize_user| %>
+
+ <%= render('cooperative/competition_prize_users/shared/tr', prize_user: prize_user) %>
+
+ <% end %>
+ <% else %>
+ <%= render 'cooperative/shared/no_data_for_table' %>
+ <% end %>
+
+
+
+<%= render partial: 'cooperative/shared/paginate', locals: { objects: prize_users } %>
\ No newline at end of file
diff --git a/app/views/cooperative/competition_prize_users/shared/_tr.html.erb b/app/views/cooperative/competition_prize_users/shared/_tr.html.erb
new file mode 100644
index 000000000..1eebe73e6
--- /dev/null
+++ b/app/views/cooperative/competition_prize_users/shared/_tr.html.erb
@@ -0,0 +1,35 @@
+<%- user = prize_user.user -%>
+
<%= prize_user.competition_prize.name %>
+
<%= prize_user.rank %>
+
<%= prize_user.competition_team.name %>
+
<%= user.real_name %>
+
<%= user.identity %>
+
<%= user.is_teacher? ? user.user_extension.technical_title : user.user_extension.student_id %>
+
<%= user.school_name %>
+
<%= display_auth_state(user.authentication?, user.process_real_name_apply.present?) %>
+
<%= display_auth_state(user.professional_certification?, user.process_professional_apply.present?) %>
+
<%= display_auth_state user.phone_binded? %>
+
<%= display_auth_state prize_user.leader?, error: '' %>
+
<%= display_text prize_user.approved_at&.strftime('%Y-%m-%d %H:%M') %>
+
<%= display_text prize_user.approver&.real_name %>
+
+
+ <% if prize_user.leader? && prize_user.competition_prize.category == 'bonus' %>
+ <% bank_content = [prize_user.extra&.[]('bank'), prize_user.extra&.[]('second_bank'), prize_user.extra&.[]('card_no')].compact.join(' ').presence || '无' %>
+ <%= javascript_void_link('查看银行账户', data: { toggle: 'tooltip', title: bank_content.html_safe, html: true, placement: 'left', trigger: 'click' }) %>
+ <% prize_module = prize_user.competition&.competition_modules.find_by(module_type: 'certificate') %>
+ <% if prize_module %>
+ <%= link_to('编辑', EduSetting.get("host_name").to_s + "/competitions/#{prize_user.competition&.identifier}?menu=#{prize_module&.id}&user_id=#{user.id}", target: "_blank") %>
+ <% end %>
+ <% end %>
+
+ <% if prize_user.pending? %>
+ <%= link_to('审批通过', approve_cooperative_competition_competition_prize_user_path(prize_user.competition, prize_user),
+ data: { confirm: '确认审批通过吗?' },
+ remote: true, method: :post, class: 'approve-action') %>
+ <% else %>
+ <%= link_to('撤销审批', unapprove_cooperative_competition_competition_prize_user_path(prize_user.competition, prize_user),
+ data: { confirm: '确认撤销审批吗?' },
+ remote: true, method: :post, class: 'approve-action') %>
+ <% end %>
+
\ No newline at end of file
diff --git a/app/views/cooperative/competition_prize_users/unapprove.js.erb b/app/views/cooperative/competition_prize_users/unapprove.js.erb
new file mode 100644
index 000000000..e4e82b38d
--- /dev/null
+++ b/app/views/cooperative/competition_prize_users/unapprove.js.erb
@@ -0,0 +1 @@
+$('.competition-prize-user-list-container .competition-prize-user-item-<%= @prize_user.id %>').html("<%= j( render partial: 'cooperative/competition_prize_users/shared/tr', locals: { prize_user: @prize_user } ) %>");
\ No newline at end of file
diff --git a/app/views/cooperative/competition_prizes/edit.js.erb b/app/views/cooperative/competition_prizes/edit.js.erb
new file mode 100644
index 000000000..66667db0e
--- /dev/null
+++ b/app/views/cooperative/competition_prizes/edit.js.erb
@@ -0,0 +1,2 @@
+$('.cooperative-modal-container').html("<%= j( render partial: 'cooperative/competition_prizes/shared/save_competition_prize_modal', locals: { prize: @prize, title: '编辑奖项', form_method: 'PATCH' } ) %>");
+$('.modal.cooperative-save-competition-prize-modal').modal('show');
\ No newline at end of file
diff --git a/app/views/cooperative/competition_prizes/index.js.erb b/app/views/cooperative/competition_prizes/index.js.erb
new file mode 100644
index 000000000..9224c930d
--- /dev/null
+++ b/app/views/cooperative/competition_prizes/index.js.erb
@@ -0,0 +1 @@
+$('#competition-prize-card .competition-prize-table tbody').html("<%= j( render partial: 'cooperative/competition_settings/shared/competition_prizes', locals: { competition: @competition } ) %>");
\ No newline at end of file
diff --git a/app/views/cooperative/competition_prizes/new.js.erb b/app/views/cooperative/competition_prizes/new.js.erb
new file mode 100644
index 000000000..86e9e195d
--- /dev/null
+++ b/app/views/cooperative/competition_prizes/new.js.erb
@@ -0,0 +1,2 @@
+$('.cooperative-modal-container').html("<%= j( render partial: 'cooperative/competition_prizes/shared/save_competition_prize_modal', locals: { prize: @prize, title: '新建奖项', form_method: 'POST' } ) %>");
+$('.modal.cooperative-save-competition-prize-modal').modal('show');
\ No newline at end of file
diff --git a/app/views/cooperative/competition_prizes/shared/_save_competition_prize_modal.html.erb b/app/views/cooperative/competition_prizes/shared/_save_competition_prize_modal.html.erb
new file mode 100644
index 000000000..daf5079ff
--- /dev/null
+++ b/app/views/cooperative/competition_prizes/shared/_save_competition_prize_modal.html.erb
@@ -0,0 +1,29 @@
+
+
+
+
+
+ <%= simple_form_for([:cooperative, prize.competition, prize], data: { form_method: form_method }, html: { class: 'cooperative-save-competition-prize-form' }, defaults: { wrapper_html: { class: 'offset-md-1 col-md-10' } }) do |f| %>
+
+ <%= f.input :name, label: '奖项名称:', placeholder: '请输入奖项名称' %>
+ <%= f.input :num, as: :integer, label: '数量:', placeholder: '请输入数量', input_html: { min: 1 } %>
+
+ <%= f.input :category, label: '奖励类型:' do %>
+ <%= f.select :category, [%w(奖金 bonus), %w(无 unset)], {}, class: 'form-control' %>
+ <% end %>
+
+
+ <% end %>
+
+
+
+
+
\ No newline at end of file
diff --git a/app/views/cooperative/competition_settings/index.html.erb b/app/views/cooperative/competition_settings/index.html.erb
new file mode 100644
index 000000000..c1b638f70
--- /dev/null
+++ b/app/views/cooperative/competition_settings/index.html.erb
@@ -0,0 +1,503 @@
+<%
+ define_breadcrumbs do
+ add_breadcrumb('竞赛列表', cooperative_competitions_path)
+ add_breadcrumb(@competition.name)
+ end
+%>
+
+
+
+
+ <%= form_tag(basic_setting_cooperative_competition_competition_settings_path(@competition), method: :post, class: 'basic-setting-form flex-1', remote: true) do %>
+
+
+
+ 主标题
+
+
+ <%= text_field_tag(:name, @competition.name, autocomplete: 'off', class: 'form-control', placeholder: '竞赛标题') %>
+
+
+
+
+
+ 副标题
+
+
+ <%= text_field_tag(:sub_title, @competition.sub_title, autocomplete: 'off', class: 'form-control', placeholder: '竞赛副标题') %>
+
+
+
+
+
+ 起止时间
+
+
+ <%= text_field_tag :start_time, @competition.start_time&.strftime('%Y-%m-%d %H:%M'), autocomplete: 'off', class: 'form-control start-date mx-0 mr-2', placeholder: '竞赛开始时间' %>
+ <%= text_field_tag :end_time, @competition.end_time&.strftime('%Y-%m-%d %H:%M'), autocomplete: 'off', class: 'form-control end-date mx-0', placeholder: '竞赛截止时间' %>
+
+
+
+
+
+
+
+ URL
+
+
+ <%= text_field_tag(:identifier, @competition.identifier, autocomplete: 'off', class: 'form-control', placeholder: '请输入url赛事网址') %>
+
+
+
+
+
+
+
+
+
+
+
+ 奖金
+
+
+
+ <%= number_field_tag(:bonus, @competition.bonus, autocomplete: 'off', step: 1, min: 0, class: 'form-control', placeholder: '请输入总奖金额') %>
+
+
+
+
+
+ 奖项数
+
+
+ <%= number_field_tag(:awards_count, @competition.awards_count, autocomplete: 'off', step: 1, min: 0, class: 'form-control', placeholder: '请输入奖项数') %>
+
+
+
+
+
+ 描述
+
+
+ <%= text_area_tag(:description, @competition.description, class: 'form-control', placeholder: '请输入赛事简介') %>
+
+
+
+
+
+
+
+
+
+ <%= javascript_void_link '保存', class: 'btn btn-primary submit-btn' %>
+
+
+
+ <% end %>
+
+
+
+
+
+
+ <%= form_tag(nav_setting_cooperative_competition_competition_settings_path(@competition), method: :post, class: 'nav-setting-form flex-1', remote: true) do %>
+
+ <% @competition.competition_modules.each do |com_module| %>
+ <% case com_module.module_type %>
+ <% when 'home' %>
+
+
+
+
+
+
+
+
+
+
+ <%= text_field_tag('navbar[][name]', com_module.name, id: nil, class: 'form-control', placeholder: '首页') %>
+
+
+
+ <%= text_field_tag('navbar[][position]', com_module.position, id: nil, class: 'form-control', placeholder: '位置') %>
+
+
+
+ <% when 'enroll' %>
+
+
+
+
+ <%= check_box_tag('', 0, !com_module.hidden, id: nil, class: 'font-16 module_hidden') %>
+
+
+
+
+
+
+ 报名
+
+
+
+
+
+ 报名截止时间
+
+
+ <%= text_field_tag :enroll_end_time, @competition.enroll_end_time&.strftime('%Y-%m-%d %H:%M'), autocomplete: 'off', class: 'form-control enroll_end_time', placeholder: '报名截止时间' %>
+
+
+
+
+
+ 报名要求
+
+
+ <%= javascript_void_link '+', class: 'btn btn-primary waves-effect waves-light btn-xs setBtn_s addRequireBtn' %>
+
+
+
+
+
+ <% when 'inform', 'chart', 'resource', 'certificate' %>
+
+ <% else %>
+
+ <% end %>
+ <% end %>
+
+
+
+
+
+
+
<%= javascript_void_link '保存', class: 'btn btn-primary submit-btn' %>
+
+
+ <% end %>
+
+
+
+
+<%# if @competition.mode == 1 %>
+
+
+
+
+
+ <% if @competition.competition_stages.count > 0 %>
+ <% @competition.competition_stages.includes(competition_stage_sections: :competition_entries).each_with_index do |stage, index| %>
+ <%= form_tag(cooperative_competition_competition_stage_path(competition_id: @competition.id, id: stage.id), method: :put, class: 'stage-update-form flex-1', remote: true) do %>
+
+
+
tab标题
+
+
+
+
总排行榜占比:
+
+
+
%
+
+
新增子阶段
+ <% if stage.max_end_time && stage.max_end_time > Time.now %>
+ <%= agree_link '发送短信提醒', send_message_cooperative_competition_competition_stage_path(@competition, stage, element: ".send-message-#{stage.id}"),
+ class: 'btn btn-outline-primary ml20', 'data-confirm': '确认执行发送短信操作?' %>
+ <% end %>
+ <% if stage.max_end_time && stage.max_end_time < Time.now && Time.now < Time.at(stage.max_end_time.to_i + 30*24*3600) %>
+ <%= agree_link '计算成绩', calculate_stage_score_cooperative_competition_competition_stage_path(@competition, stage, element: ".calculate-score-#{stage.id}"),
+ class: 'btn btn-outline-primary ml20', 'data-confirm': '确认执行计算成绩操作?' %>
+ <% end %>
+
+ <%= delete_link '删除', cooperative_competition_competition_stage_path(competition_id: @competition.id, id: stage.id), class: 'btn btn-default delete-stage ml20' %>
+
保存
+
+
+
+ <% stage.competition_stage_sections.each_with_index do |section, j| %>
+
+
第<%= j + 1 %>阶段
+
+
+
+
有效时间:
+
+ <%= text_field_tag 'stage[][start_time]', section.start_time&.strftime('%Y-%m-%d %H:%M'), autocomplete: 'off', class: 'section-start-time form-control', placeholder: '有效开始时间' %>
+
+
~
+
+ <%= text_field_tag 'stage[][end_time]', section.end_time&.strftime('%Y-%m-%d %H:%M'), autocomplete: 'off', class: 'section-end-time form-control', placeholder: '有效结束时间' %>
+
+
+
+
+
成绩来源:
+
+
+ >经验值
+ >预测准确率
+
+
+
+
+
+
+
+ 删除
+
+
+ <% end %>
+
+
+
+ <% end %>
+ <% end %>
+ <% else %>
+ <%= form_tag(cooperative_competition_competition_stages_path(competition_id: @competition.id), method: :post, class: 'stage-update-form new-stage-form flex-1', remote: true) do %>
+
+
+
tab标题
+
+
+
+
总排行榜占比:
+
+
+
%
+
+
删除
+
保存
+
+
+
+
第1阶段
+
+
+
+
有效时间:
+
+ <%= text_field_tag 'stage[][start_time]', '', autocomplete: 'off', class: 'section-start-time form-control', placeholder: '有效开始时间' %>
+
+
~
+
+ <%= text_field_tag 'stage[][end_time]', '', autocomplete: 'off', class: 'section-end-time form-control', placeholder: '有效结束时间' %>
+
+
+
+
+
成绩来源:
+
+
+ 经验值
+ 预测准确率
+
+
+
+
+
+
+
+ 删除
+
+
+
+
+ <% end %>
+ <% end %>
+
+
+
+
+
+
+
+
+
+
+ 序号
+ 奖项名称
+ 数量
+ 奖励类型
+ 队员个人证书模板
+ 团队证书模板
+ 指导老师证书模板
+ 操作
+
+
+ <%= render 'cooperative/competition_settings/shared/competition_prizes', competition: @competition %>
+
+
+
+
+
+<%# end %>
+
+<%= render partial: 'cooperative/shared/modal/upload_file_modal', locals: { title: '上传证书模板', accept: 'image/*' } %>
\ No newline at end of file
diff --git a/app/views/cooperative/competition_settings/shared/_competition_prizes.html.erb b/app/views/cooperative/competition_settings/shared/_competition_prizes.html.erb
new file mode 100644
index 000000000..5faf40579
--- /dev/null
+++ b/app/views/cooperative/competition_settings/shared/_competition_prizes.html.erb
@@ -0,0 +1,27 @@
+<% competition.competition_prizes.each_with_index do |prize, index| %>
+
+ <%= index + 1 %>
+ <%= prize.name %>
+ <%= prize.num %>
+ <%= prize.category_text %>
+
+ <% member_image_exists = Util::FileManage.exists?(prize, CompetitionPrize.member_suffix) %>
+ <%= image_tag(member_image_exists ? Util::FileManage.source_disk_file_url(prize, CompetitionPrize.member_suffix) : '', height: 60, class: "w-100 preview-image prize-member-image-#{prize.id}", style: member_image_exists ? '' : 'display:none') %>
+ <%= javascript_void_link member_image_exists ? '重新上传' : '上传模板', class: 'action upload-prize-member-image-action', data: { source_id: prize.id, source_type: 'CompetitionPrize', suffix: CompetitionPrize.member_suffix, toggle: 'modal', target: '.cooperative-upload-file-modal' } %>
+
+
+ <% team_image_exists = Util::FileManage.exists?(prize, CompetitionPrize.team_suffix) %>
+ <%= image_tag(team_image_exists ? Util::FileManage.source_disk_file_url(prize, CompetitionPrize.team_suffix) : '', height: 60, class: "w-100 preview-image prize-team-image-#{prize.id}", style: team_image_exists ? '' : 'display:none') %>
+ <%= javascript_void_link team_image_exists ? '重新上传' : '上传模板', class: 'action upload-prize-team-image-action', data: { source_id: prize.id, source_type: 'CompetitionPrize', suffix: CompetitionPrize.team_suffix, toggle: 'modal', target: '.cooperative-upload-file-modal' } %>
+
+
+ <% teacher_image_exists = Util::FileManage.exists?(prize, CompetitionPrize.teacher_suffix) %>
+ <%= image_tag(teacher_image_exists ? Util::FileManage.source_disk_file_url(prize, CompetitionPrize.teacher_suffix) : '', height: 60, class: "w-100 preview-image prize-teacher-image-#{prize.id}", style: teacher_image_exists ? '' : 'display:none') %>
+ <%= javascript_void_link teacher_image_exists ? '重新上传' : '上传模板', class: 'action upload-prize-teacher-image-action', data: { source_id: prize.id, source_type: 'CompetitionPrize', suffix: CompetitionPrize.teacher_suffix, toggle: 'modal', target: '.cooperative-upload-file-modal' } %>
+
+
+ <%= link_to '编辑', edit_cooperative_competition_competition_prize_path(competition, prize), remote: true, class: 'action edit-competition-prize-action' %>
+ <%= delete_link '删除', cooperative_competition_competition_prize_path(competition, prize, element: ".competition-prize-item-#{prize.id}"), class: 'action delete-competition-prize-action' %>
+
+
+<% end %>
\ No newline at end of file
diff --git a/app/views/cooperative/competition_stages/calculate_stage_score.js.erb b/app/views/cooperative/competition_stages/calculate_stage_score.js.erb
new file mode 100644
index 000000000..cb7a93c09
--- /dev/null
+++ b/app/views/cooperative/competition_stages/calculate_stage_score.js.erb
@@ -0,0 +1 @@
+alert("<%= @message %>");
\ No newline at end of file
diff --git a/app/views/cooperative/competition_stages/destroy.js.erb b/app/views/cooperative/competition_stages/destroy.js.erb
new file mode 100644
index 000000000..cdc8c3f7d
--- /dev/null
+++ b/app/views/cooperative/competition_stages/destroy.js.erb
@@ -0,0 +1 @@
+window.location.reload();
\ No newline at end of file
diff --git a/app/views/cooperative/competitions/index.html.erb b/app/views/cooperative/competitions/index.html.erb
new file mode 100644
index 000000000..340d91afe
--- /dev/null
+++ b/app/views/cooperative/competitions/index.html.erb
@@ -0,0 +1,18 @@
+<% define_breadcrumbs do %>
+ <% add_breadcrumb('竞赛列表', cooperative_competitions_path) %>
+<% end %>
+
+
+
+
+
+ <%= render partial: 'cooperative/competitions/shared/list', locals: { competitions: @competitions } %>
+
+
+<%= render 'cooperative/competitions/shared/create_competition_modal' %>
+<%= render partial: 'cooperative/shared/modal/upload_file_modal', locals: { title: '上传图片' } %>
+<%= render partial: 'cooperative/competitions/shared/import_competition_score_modal' %>
\ No newline at end of file
diff --git a/app/views/cooperative/competitions/index.js.erb b/app/views/cooperative/competitions/index.js.erb
new file mode 100644
index 000000000..7763d7194
--- /dev/null
+++ b/app/views/cooperative/competitions/index.js.erb
@@ -0,0 +1 @@
+$('.competitions-list-container').html("<%= j( render partial: 'cooperative/competitions/shared/list', locals: { competitions: @competitions } ) %>");
\ No newline at end of file
diff --git a/app/views/cooperative/competitions/online_switch.js.erb b/app/views/cooperative/competitions/online_switch.js.erb
new file mode 100644
index 000000000..72bd760c2
--- /dev/null
+++ b/app/views/cooperative/competitions/online_switch.js.erb
@@ -0,0 +1,4 @@
+var page_no = $("#competition-item-<%= @competition.id %>").children(":first").html();
+$("#competition-item-<%= @competition.id %>").html("<%= j render partial: "cooperative/competitions/shared/td", locals: {competition: @competition, page_no: 1} %>");
+$("#competition-item-<%= @competition.id %>").children(":first").html(page_no);
+show_success_flash();
\ No newline at end of file
diff --git a/app/views/cooperative/competitions/publish.js.erb b/app/views/cooperative/competitions/publish.js.erb
new file mode 100644
index 000000000..72bd760c2
--- /dev/null
+++ b/app/views/cooperative/competitions/publish.js.erb
@@ -0,0 +1,4 @@
+var page_no = $("#competition-item-<%= @competition.id %>").children(":first").html();
+$("#competition-item-<%= @competition.id %>").html("<%= j render partial: "cooperative/competitions/shared/td", locals: {competition: @competition, page_no: 1} %>");
+$("#competition-item-<%= @competition.id %>").children(":first").html(page_no);
+show_success_flash();
\ No newline at end of file
diff --git a/app/views/cooperative/competitions/shared/_create_competition_modal.html.erb b/app/views/cooperative/competitions/shared/_create_competition_modal.html.erb
new file mode 100644
index 000000000..b7e59e8f9
--- /dev/null
+++ b/app/views/cooperative/competitions/shared/_create_competition_modal.html.erb
@@ -0,0 +1,28 @@
+
\ No newline at end of file
diff --git a/app/views/cooperative/competitions/shared/_import_competition_score_modal.html.erb b/app/views/cooperative/competitions/shared/_import_competition_score_modal.html.erb
new file mode 100644
index 000000000..231b830e8
--- /dev/null
+++ b/app/views/cooperative/competitions/shared/_import_competition_score_modal.html.erb
@@ -0,0 +1,32 @@
+
\ No newline at end of file
diff --git a/app/views/cooperative/competitions/shared/_list.html.erb b/app/views/cooperative/competitions/shared/_list.html.erb
new file mode 100644
index 000000000..01babd81f
--- /dev/null
+++ b/app/views/cooperative/competitions/shared/_list.html.erb
@@ -0,0 +1,30 @@
+
+
+ 序号
+ 竞赛主标题
+ 竞赛副标题
+ 模式
+ 报名人数
+ 指导老师
+ 参赛者
+ 主题图片792*340
+ 创建时间
+
+ 操作
+
+
+
+ <% if competitions.present? %>
+ <% competitions.each_with_index do |competition, index| %>
+
+ <% page_no = list_index_no(@params_page.to_i, index) %>
+ <%= render partial: "cooperative/competitions/shared/td", locals: {competition: competition, page_no: page_no} %>
+
+ <% end %>
+ <% else %>
+ <%= render 'cooperative/shared/no_data_for_table' %>
+ <% end %>
+
+
+
+<%= render partial: 'cooperative/shared/paginate', locals: { objects: competitions } %>
\ No newline at end of file
diff --git a/app/views/cooperative/competitions/shared/_td.html.erb b/app/views/cooperative/competitions/shared/_td.html.erb
new file mode 100644
index 000000000..dc4eed160
--- /dev/null
+++ b/app/views/cooperative/competitions/shared/_td.html.erb
@@ -0,0 +1,31 @@
+
<%= page_no %>
+
+ <%= link_to competition.name, cooperative_competition_enroll_lists_path(competition), :title => competition.name %>
+
+
<%= competition.sub_title %>
+
<%= competition.mode_type %>
+
<%= @member_count_map&.fetch(competition.id, 0) || competition.team_members.count %>
+
<%= competition.teacher_staff_num %>
+
<%= competition.member_staff_num %>
+
+ <% imageExists = File.exist?(disk_filename("Competition", competition.id)) %>
+ <% imageUrl = imageExists ? '/' + url_to_avatar(competition) + "?#{Time.now.to_i}" : '' %>
+ <%= image_tag(imageUrl, width: 60, height: 40, class: "preview-image competition-image-#{competition.id}", data: { toggle: 'tooltip', title: '点击预览' }, style: imageExists ? '' : 'display:none') %>
+ <%= javascript_void_link imageExists ? '重新上传' : '上传图片', class: 'action upload-competition-image-action', data: { source_id: competition.id, source_type: 'Competition', toggle: 'modal', target: '.cooperative-upload-file-modal' } %>
+
+
<%= competition.created_at.strftime('%Y-%m-%d %H:%M') %>
+
+ <%= link_to '配置', cooperative_competition_competition_settings_path(competition), class: 'action edit-action' %>
+
+ <% if !competition.status? && competition.published_at.blank? %>
+ <%= link_to '发布', publish_cooperative_competition_path(competition), class: 'action publish-action', method: :post, remote: true %>
+ <% else %>
+ <%= link_to '取消发布', unpublish_cooperative_competition_path(competition), class: 'action unpublish-action', method: :post, remote: true %>
+ <% end %>
+
+ <%= link_to competition.published? ? "下架" : "上架", online_switch_cooperative_competition_path(competition), class: 'action online-action', method: :post, remote: true %>
+
+ <% if competition.mode != 1 %>
+ <%= javascript_void_link '导入成绩', class: 'action', data: { competition_id: competition.id, toggle: 'modal', target: '.cooperative-import-competition-score-modal'} %>
+ <% end %>
+
\ No newline at end of file
diff --git a/app/views/cooperative/competitions/unpublish.js.erb b/app/views/cooperative/competitions/unpublish.js.erb
new file mode 100644
index 000000000..72bd760c2
--- /dev/null
+++ b/app/views/cooperative/competitions/unpublish.js.erb
@@ -0,0 +1,4 @@
+var page_no = $("#competition-item-<%= @competition.id %>").children(":first").html();
+$("#competition-item-<%= @competition.id %>").html("<%= j render partial: "cooperative/competitions/shared/td", locals: {competition: @competition, page_no: 1} %>");
+$("#competition-item-<%= @competition.id %>").children(":first").html(page_no);
+show_success_flash();
\ No newline at end of file
diff --git a/app/views/cooperative/enroll_lists/_list.html.erb b/app/views/cooperative/enroll_lists/_list.html.erb
new file mode 100644
index 000000000..b2bc0627a
--- /dev/null
+++ b/app/views/cooperative/enroll_lists/_list.html.erb
@@ -0,0 +1,42 @@
+
+
+
+ 序号
+ <%= sort_tag('战队ID', name: 'competition_team_id', path: cooperative_competition_enroll_lists_path(@competition)) %>
+ 战队名称
+ 创建者
+ 队员姓名
+ 职业
+ 学号
+ 队员学校
+ 地区
+ 指导老师
+ <%= sort_tag('报名时间', name: 'created_at', path: cooperative_competition_enroll_lists_path(@competition)) %>
+
+
+
+ <% if enroll_lists.present? %>
+ <% enroll_lists.each_with_index do |member, index| %>
+
+ <% team = member.competition_team %>
+ <% page_no = list_index_no(@params_page.to_i, index) %>
+ <%= page_no %>
+ <%= member.competition_team_id %>
+ <%= @personal ? "--" : team.name %>
+ <%= team.user.real_name %>
+ <%= member.user.real_name %>
+ <%= member.user.identity %>
+ <%= member.user.student_id %>
+ <%= member.user.school_name %>
+ <%= member.user.school_province %>
+ <%= @personal ? "--" : team.teachers_info %>
+ <%= member.created_at.strftime('%Y-%m-%d %H:%M') %>
+
+ <% end %>
+ <% else %>
+ <%= render 'cooperative/shared/no_data_for_table' %>
+ <% end %>
+
+
+
+<%= render partial: 'cooperative/shared/paginate', locals: { objects: enroll_lists } %>
\ No newline at end of file
diff --git a/app/views/cooperative/enroll_lists/export.xlsx.axlsx b/app/views/cooperative/enroll_lists/export.xlsx.axlsx
new file mode 100644
index 000000000..303b48a07
--- /dev/null
+++ b/app/views/cooperative/enroll_lists/export.xlsx.axlsx
@@ -0,0 +1,29 @@
+wb = xlsx_package.workbook
+wb.add_worksheet(name: '报名列表') do |sheet|
+ sheet.add_row %w(序号 战队ID 战队名称 创建者 指导老师 队员姓名 职业 手机号 邮箱 学号 实名认证 职业认证 队员学校 地区 报名时间 排名)
+
+ @enroll_lists.each_with_index do |member, index|
+ team = member.competition_team
+ member_user = member.user
+ rank = @competition_scores.length > 0 ? @competition_scores.index(member.competition_team_id).to_i + 1 : "--"
+ data = [
+ index + 1,
+ member.competition_team_id,
+ @personal ? "--" : team.name,
+ team.user.real_name,
+ @personal ? "--" : team.teachers_info,
+ member_user.real_name,
+ member_user.identity,
+ member_user.phone.present? ? (member_user.phone.to_s + "\t") : "--",
+ member_user.mail,
+ member_user.student_id.present? ? (member_user.student_id.to_s + "\t") : "--",
+ member_user.authentication ? "√" : "",
+ member_user.professional_certification ? "√" : "",
+ member_user.school_name,
+ member_user.school_province,
+ team.created_at&.strftime('%Y-%m-%d %H:%M'),
+ rank
+ ]
+ sheet.add_row(data)
+ end
+end
\ No newline at end of file
diff --git a/app/views/cooperative/enroll_lists/index.html.erb b/app/views/cooperative/enroll_lists/index.html.erb
new file mode 100644
index 000000000..36fb7968c
--- /dev/null
+++ b/app/views/cooperative/enroll_lists/index.html.erb
@@ -0,0 +1,33 @@
+<%
+ define_breadcrumbs do
+ add_breadcrumb('竞赛列表', cooperative_competitions_path)
+ add_breadcrumb(@competition.name)
+ end
+%>
+
+
+
+
+ <%= render(partial: 'cooperative/enroll_lists/list', locals: { enroll_lists: @enroll_lists }) %>
+
\ No newline at end of file
diff --git a/app/views/cooperative/enroll_lists/index.js.erb b/app/views/cooperative/enroll_lists/index.js.erb
new file mode 100644
index 000000000..8ceb62669
--- /dev/null
+++ b/app/views/cooperative/enroll_lists/index.js.erb
@@ -0,0 +1 @@
+$('.competition-enroll-list-container').html("<%= j( render(partial: 'cooperative/enroll_lists/list', locals: { enroll_lists: @enroll_lists }) ) %>");
\ No newline at end of file
diff --git a/app/views/cooperative/laboratory_shixuns/index.html.erb b/app/views/cooperative/laboratory_shixuns/index.html.erb
index da40dd6ed..b7cce66ce 100644
--- a/app/views/cooperative/laboratory_shixuns/index.html.erb
+++ b/app/views/cooperative/laboratory_shixuns/index.html.erb
@@ -35,7 +35,7 @@
<% end %>