Merge branch 'dev_aliyun' of http://bdgit.educoder.net/Hjqreturn/educoder into dev_aliyun

dev_auth
cxt 5 years ago
commit 002a07e8e9

@ -154,7 +154,7 @@ $(document).on('turbolinks:load', function(){
},
templateResult: function (item) {
if(!item.id || item.id === '') return item.text;
return $("<span>" + item.real_name + " <span class='font-12'>" + item.school_name + ' ' + item.hidden_phone + "</span></span>");
return $("<div class='row px-0'><span class='col-3'>" + item.real_name + "</span><span class='col-5 font-12'>" + item.school_name + "</span><span class='col-4 font-12'>" + item.hidden_phone + "</span></div>");
},
templateSelection: function(item){
if (item.id) {

@ -0,0 +1,50 @@
$(document).on('turbolinks:load', function() {
if ($('body.admins-subjects-index-page').length > 0) {
var $form = $('.subject-list-form');
// ************** 学校选择 *************
$form.find('.school-select').select2({
theme: 'bootstrap4',
placeholder: '请选择创建者单位',
minimumInputLength: 1,
ajax: {
delay: 500,
url: '/api/schools/for_option.json',
dataType: 'json',
data: function(params){
return { keyword: params.term };
},
processResults: function(data){
return { results: data.schools }
}
},
templateResult: function (item) {
if(!item.id || item.id === '') return item.text;
return item.name;
},
templateSelection: function(item){
if (item.id) {
}
return item.name || item.text;
}
});
// 清空
$form.on('click', '.clear-btn', function(){
$form.find('select[name="status"]').val('');
$form.find('.school-select').val('').trigger('change');
$form.find('input[name="keyword"]').val('');
$form.find('#homepage_show').attr('checked', false);
$form.find('#excellent').attr('checked', false);
$form.find('input[type="submit"]').trigger('click');
})
// 上传图片
$('.modal.admin-upload-file-modal').on('upload:success', function(e, data){
var $imageElement = $('.subject-image-' + data.source_id);
$imageElement.attr('src', data.url);
$imageElement.show();
$imageElement.next().html('重新上传');
})
}
});

@ -21,9 +21,12 @@
flex-direction: column;
&-logo {
padding-left: 5px;
overflow: hidden;
margin-bottom: 10px;
& > .logo-label {
display: none;
}
}
}
@ -54,7 +57,7 @@
-ms-transform: translateX(50%);
transform: translateX(50%);
}
ul ul a {
padding: 10px !important;
@ -76,6 +79,23 @@
display: flex;
flex-direction: row;
justify-content: space-between;
&-logo {
display: flex;
justify-content: space-between;
align-items: center;
& > img {
width: 40px;
height: auto;
}
& > .logo-label {
font-size: 18px;
color: darkgrey;
margin-left: 10px;
}
}
}
#sidebarCollapse {
@ -183,7 +203,7 @@
ul li a {
padding: 10px;
font-size: 0.85em;
i {
margin-right: 0;
display: block;
@ -194,7 +214,7 @@
& > ul > li > a > i {
font-size: 1.8em;
}
ul ul a {
padding: 10px !important;
}

@ -0,0 +1,8 @@
class Admins::SubjectsController < Admins::BaseController
def index
default_sort('created_at', 'desc')
subjects = Admins::SubjectQuery.call(params)
@subjects = paginate subjects.includes(:repertoire, :subject_level_system, user: { user_extension: :school })
end
end

@ -145,7 +145,10 @@ class Competitions::CompetitionsController < Competitions::BaseController
end
def allow_visit
render_forbidden unless current_competition.published? || admin_or_business?
return if current_competition.published? || admin_or_business?
return if current_competition.nearly_published? && current_competition.manager?(current_user)
render_forbidden
end
def chart_visible

@ -0,0 +1,11 @@
module Admins::SubjectsHelper
def display_subject_status(subject)
style =
case subject.status
when 0 then 'text-secondary'
when 1 then 'text-warning'
when 2 then 'text-success'
end
raw content_tag(:span, t("subject.status.#{subject.status}"), class: style)
end
end

@ -14,7 +14,13 @@ module CustomSortable
return relations unless self.class.check_sort_parameter_validate(sort_by.to_s, sort_direction.to_s)
order_method = self.class.sort_options[:reorder] ? :reorder : :order
relations.send(order_method, "#{sort_by} #{sort_direction}")
default_table = self.class.sort_options[:default_table]
if default_table.present?
relations.send(order_method, "#{default_table}.#{sort_by} #{sort_direction}")
else
relations.send(order_method, "#{sort_by} #{sort_direction}")
end
end
module ClassMethods
@ -23,6 +29,7 @@ module CustomSortable
@_sort_options[:default_by] = opts[:default_by].to_s
@_sort_options[:default_direction] = opts[:default_direction].to_s
@_sort_options[:reorder] = opts[:reorder]
@_sort_options[:default_table] = opts[:default_table]
@_sort_columns = columns.map(&:to_s)
end

@ -7,6 +7,7 @@ class Subject < ApplicationRecord
#status :0 编辑中 1 审核中 2 发布
belongs_to :repertoire
belongs_to :user
belongs_to :subject_level_system, optional: true
has_many :stages, -> { order("stages.position ASC") }, dependent: :destroy

@ -0,0 +1,5 @@
class SubjectLevelSystem < ApplicationRecord
default_scope { order(level: :asc) }
has_many :subjects, dependent: :nullify
end

@ -0,0 +1,45 @@
class Admins::SubjectQuery < ApplicationQuery
include CustomSortable
attr_reader :params
sort_columns :created_at, default_by: :created_at, default_direction: :desc, default_table: 'subjects'
def initialize(params)
@params = params
end
def call
subjects = Subject.all
# 状态过滤
status =
case params[:status].to_s.strip
when 'pending' then 0
when 'applying' then 1
when 'published' then 2
end
subjects = subjects.where(status: status) if status
# 创建者单位
if params[:school_id].present?
subjects = subjects.joins(user: :user_extension).where(user_extensions: { school_id: params[:school_id] })
end
# 首页展示、金课
%i[homepage_show excellent].each do |column|
if params[column].present? && params[column].to_s == 'true'
subjects = subjects.where(column => true)
end
end
# 关键字
keyword = params[:keyword].to_s.strip
if keyword
sql = 'CONCAT(lastname, firstname) LIKE :keyword OR subjects.name LIKE :keyword'
subjects = subjects.joins(:user).where(sql, keyword: "%#{keyword}%")
end
custom_sort(subjects, params[:sort_by], params[:sort_direction])
end
end

@ -36,12 +36,14 @@
<%= javascript_void_link '添加管理员', class: 'action', data: { laboratory_id: laboratory.id, toggle: 'modal', target: '.admin-add-laboratory-user-modal' } %>
<% end %>
<%= javascript_void_link('更多', class: 'action dropdown-toggle', 'data-toggle': 'dropdown', 'aria-haspopup': true, 'aria-expanded': false) %>
<div class="dropdown-menu more-action-dropdown">
<%= link_to '轮播图', admins_laboratory_carousels_path(laboratory), class: 'dropdown-item' %>
<div class="d-inline">
<%= javascript_void_link('更多', class: 'action dropdown-toggle', 'data-toggle': 'dropdown', 'aria-haspopup': true, 'aria-expanded': false) %>
<div class="dropdown-menu more-action-dropdown">
<%= link_to '轮播图', admins_laboratory_carousels_path(laboratory), class: 'dropdown-item' %>
<% if school.present? && laboratory.id != 1 %>
<%= delete_link '删除', admins_laboratory_path(laboratory, element: ".laboratory-item-#{laboratory.id}"), class: 'dropdown-item delete-laboratory-action' %>
<% end %>
<% if school.present? && laboratory.id != 1 %>
<%= delete_link '删除', admins_laboratory_path(laboratory, element: ".laboratory-item-#{laboratory.id}"), class: 'dropdown-item delete-laboratory-action' %>
<% end %>
</div>
</div>
</td>

@ -1,9 +1,10 @@
<% sidebar_collapse = request.cookies['admin_sidebar_collapse'].to_s == 'true' %>
<nav id="sidebar" class="<%= sidebar_collapse ? 'active' : '' %>" data-current-controller="<%= admin_sidebar_controller %>">
<div class="sidebar-header">
<a href="/" class="sidebar-header-logo" data-toggle="tooltip" title="返回主站">
<%= image_tag('logo.png') %>
</a>
<div class="sidebar-header-logo">
<img class="rounded-circle" src="/images/<%= url_to_avatar(current_user) %>" />
<span class="logo-label">后台管理</span>
</div>
<div id="sidebarCollapse" class="navbar-btn <%= sidebar_collapse ? 'active' : '' %>">
<i class="fa fa-chevron-left fold" data-toggle="tooltip" data-placement="right" data-boundary="window" title="收起"></i>
<i class="fa fa-bars unfold" data-toggle="tooltip" data-placement="right" data-boundary="window" title="展开"></i>
@ -29,6 +30,12 @@
<% end %>
</li>
<li>
<%= sidebar_item_group('#subject-submenu', '实践课程', icon: 'th-list') do %>
<li><%= sidebar_item(admins_subjects_path, '课程列表', icon: 'cog', controller: 'admins-subjects') %></li>
<% end %>
</li>
<li>
<%= sidebar_item_group('#schools-submenu', '单位管理', icon: 'building') do %>
<li><%= sidebar_item(admins_schools_path, '单位列表', icon: 'university', controller: 'admins-schools') %></li>

@ -17,7 +17,7 @@
<span class="input-group-text">文件</span>
</div>
<div class="custom-file">
<input type="file" name="file" class="upload-file-input" id="upload-file-input">
<input type="file" name="file" class="upload-file-input" accept="<%= accept ||= '*' %>" id="upload-file-input">
<label class="custom-file-label file-names" for="upload-file-input">选择文件</label>
</div>
</div>

@ -0,0 +1,39 @@
<% define_admin_breadcrumbs do %>
<% add_admin_breadcrumb('课程配置') %>
<% end %>
<div class="box search-form-container subject-list-form">
<%= form_tag(admins_subjects_path, method: :get, class: 'form-inline search-form flex-1', remote: true) do %>
<div class="form-group mr-1">
<label for="status">状态:</label>
<% status_options = [['全部', ''], ['编辑中', 'pending'], ['审核中', 'applying'], ['已发布', 'published']] %>
<%= select_tag(:status, options_for_select(status_options), class: 'form-control') %>
</div>
<div class="form-group col-12 col-md-3">
<label for="school_name">单位:</label>
<%= select_tag :school_id, options_for_select([''], params[:school_id]), class: 'form-control school-select flex-1' %>
</div>
<%= text_field_tag(:keyword, params[:keyword], class: 'form-control col-12 col-md-2 mr-3', placeholder: '创建者/课程名称检索') %>
<div class="form-check mr-2">
<%= hidden_field_tag(:homepage_show, false, id:'') %>
<%= check_box_tag(:homepage_show, true, params[:homepage_show].to_s == 'true', class: 'form-check-input') %>
<label class="form-check-label" for="homepage_show">只看首页展示</label>
</div>
<div class="form-check mr-2">
<%= hidden_field_tag(:excellent, false, id:'') %>
<%= check_box_tag(:excellent, true, params[:excellent].to_s == 'true', class: 'form-check-input') %>
<label class="form-check-label" for="excellent">只看金课</label>
</div>
<%= submit_tag('搜索', class: 'btn btn-primary ml-3', 'data-disable-with': '搜索中...') %>
<input type="reset" class="btn btn-secondary clear-btn" value="清空"/>
<% end %>
</div>
<div class="box subject-list-container">
<%= render partial: 'admins/subjects/shared/list', locals: { subjects: @subjects } %>
</div>

@ -0,0 +1 @@
$('.subject-list-container').html("<%= j( render partial: 'admins/subjects/shared/list', locals: { subjects: @subjects } ) %>");

@ -0,0 +1,73 @@
<table class="table table-hover text-center subject-list-table">
<thead class="thead-light">
<tr>
<th width="14%" class="text-left">名称</th>
<th width="6%">阶段数</th>
<th width="6%">实训数</th>
<th width="8%">技术体系</th>
<th width="8%">等级体系</th>
<th width="8%">封面</th>
<th width="8%">创建者</th>
<th width="10%">单位</th>
<th width="8%">开课人数</th>
<th width="10%"><%= sort_tag('创建时间', name: 'created_at', path: admins_subjects_path) %></th>
<th width="7%">状态</th>
<th width="14%">操作</th>
</tr>
</thead>
<tbody>
<% if subjects.present? %>
<% subjects.each do |subject| %>
<tr class="subject-item-<%= subject.id %>">
<td class="text-left">
<%= link_to(subject.name, subject_path(subject), target: '_blank') %>
<span class="badge badge-pill badge-success homepage-show-badge" style="<%= subject.homepage_show? ? '' : 'display:none' %>">首页</span>
<span class="badge badge-pill badge-info excellent-badge" style="<%= subject.excellent? ? '' : 'display:none' %>">金课</span>
</td>
<td><%= subject.stages_count %></td>
<td><%= subject.shixuns_count %></td>
<td><%= display_text subject.repertoire&.name %></td>
<td><%= display_text subject.subject_level_system&.name %></td>
<td>
<% image_exists = Util::FileManage.exists?(subject) %>
<%= image_tag(image_exists ? Util::FileManage.source_disk_file_url(subject) : '', height: 40, class: "w-100 preview-image subject-image-#{subject.id}", style: image_exists ? '' : 'display:none') %>
<%= javascript_void_link image_exists ? '重新上传' : '上传图片', class: 'action upload-image-action', data: { source_id: subject.id, source_type: 'Subject', toggle: 'modal', target: '.admin-upload-file-modal' } %>
</td>
<td><%= subject.user.real_name %></td>
<td><%= subject.user.school_name %></td>
<td><%= subject.student_count %></td>
<td><%= subject.created_at&.strftime('%Y-%m-%d %H:%M') %></td>
<td>
<%= display_subject_status(subject) %>
</td>
<td>
<%#= javascript_void_link('编辑', class: 'edit-action') %>
<%#= javascript_void_link('隐藏', class: 'hide-action', style: subject.hidden? ? 'display:none' : '') %>
<%#= javascript_void_link('取消隐藏', class: 'active-action', style: subject.hidden? ? '' : 'display:none') %>
<%# if subject.published? %>
<!-- <div class="d-inline">-->
<%#= javascript_void_link('更多', class: 'action dropdown-toggle', 'data-toggle': 'dropdown', 'aria-haspopup': true, 'aria-expanded': false) %>
<!-- <div class="dropdown-menu more-action-dropdown">-->
<%#= javascript_void_link('首页展示', class: 'dropdown-item homepage-show-action', style: subject.homepage_show? ? 'display:none' : '') %>
<%#= javascript_void_link('取消首页展示', class: 'dropdown-item homepage-hide-action', style: subject.homepage_show? ? '' : 'display:none') %>
<%#= javascript_void_link('选为金课', class: 'dropdown-item excellent-action', style: subject.excellent? ? 'display:none' : '') %>
<%#= javascript_void_link('取消金课', class: 'dropdown-item cancel-excellent-action', style: subject.excellent? ? '' : 'display:none') %>
<%#= delete_link '删除', admins_subjects_path(subject, element: ".subject-item-#{subject.id}"), class: 'delete-subject-action' %>
<!-- </div>-->
<!-- </div>-->
<%# end %>
</td>
</tr>
<% end %>
<% else %>
<%= render 'admins/shared/no_data_for_table' %>
<% end %>
</tbody>
</table>
<%= render partial: 'admins/shared/paginate', locals: { objects: subjects } %>
<%= render partial: 'admins/shared/modal/upload_file_modal', locals: { title: '上传图片', accept: 'image/*' } %>

@ -43,13 +43,15 @@
<%= javascript_void_link '加锁', class: 'action lock-action', data: { id: user.id }, style: user.locked? || user.registered? ? 'display: none;' : '' %>
<% end %>
<%= javascript_void_link('更多', class: 'action dropdown-toggle', 'data-toggle': 'dropdown', 'aria-haspopup': true, 'aria-expanded': false) %>
<div class="dropdown-menu more-action-dropdown">
<%= javascript_void_link('奖励', class: 'dropdown-item reward-grade-action', data: { toggle: 'modal', target: '.admin-users-reward-grade-modal', id: user.id }) %>
<div class="d-inline">
<%= javascript_void_link('更多', class: 'action dropdown-toggle', 'data-toggle': 'dropdown', 'aria-haspopup': true, 'aria-expanded': false) %>
<div class="dropdown-menu more-action-dropdown">
<%= javascript_void_link('奖励', class: 'dropdown-item reward-grade-action', data: { toggle: 'modal', target: '.admin-users-reward-grade-modal', id: user.id }) %>
<%= javascript_void_link '恢复禁密账号', class: 'dropdown-item reset-login-times-action', data: { id: user.id } %>
<%= javascript_void_link '恢复禁密账号', class: 'dropdown-item reset-login-times-action', data: { id: user.id } %>
<%= delete_link '删除', admins_user_path(user, element: ".user-item-#{user.id}"), class: 'dropdown-item delete-user-action' %>
<%= delete_link '删除', admins_user_path(user, element: ".user-item-#{user.id}"), class: 'dropdown-item delete-user-action' %>
</div>
</div>
</td>
</tr>

@ -27,5 +27,9 @@ json.competitions do
# json.end_time section.display_end_time
# end
# end
json.permission do
json.editable current_user.admin_or_business? || (competition.nearly_published? && competition.manager?(current_user))
end
end
end

@ -0,0 +1,6 @@
'zh-CN':
subject:
status:
'0': 编辑中
'1': 审核中
'2': 已发布

@ -1051,6 +1051,8 @@ Rails.application.routes.draw do
resources :weapp_adverts, only: [:index, :create, :update, :destroy] do
post :drag, on: :collection
end
resources :subjects, only: [:index]
end
namespace :cooperative do

File diff suppressed because one or more lines are too long

@ -26136,12 +26136,16 @@ input.form-control {
/* line 23, app/assets/stylesheets/admins/sidebar.scss */
#sidebar.active .sidebar-header-logo {
padding-left: 5px;
overflow: hidden;
margin-bottom: 10px;
}
/* line 30, app/assets/stylesheets/admins/sidebar.scss */
/* line 27, app/assets/stylesheets/admins/sidebar.scss */
#sidebar.active .sidebar-header-logo > .logo-label {
display: none;
}
/* line 33, app/assets/stylesheets/admins/sidebar.scss */
#sidebar.active ul li a {
padding: 10px;
text-align: center;
@ -26152,12 +26156,12 @@ input.form-control {
justify-content: center;
}
/* line 37, app/assets/stylesheets/admins/sidebar.scss */
/* line 40, app/assets/stylesheets/admins/sidebar.scss */
#sidebar.active ul li a span {
display: none;
}
/* line 39, app/assets/stylesheets/admins/sidebar.scss */
/* line 42, app/assets/stylesheets/admins/sidebar.scss */
#sidebar.active ul li a i {
margin-right: 0;
display: block;
@ -26167,7 +26171,7 @@ input.form-control {
height: 20px;
}
/* line 49, app/assets/stylesheets/admins/sidebar.scss */
/* line 52, app/assets/stylesheets/admins/sidebar.scss */
#sidebar.active .dropdown-toggle::after {
top: auto;
bottom: 10px;
@ -26176,17 +26180,17 @@ input.form-control {
transform: translateX(50%);
}
/* line 58, app/assets/stylesheets/admins/sidebar.scss */
/* line 61, app/assets/stylesheets/admins/sidebar.scss */
#sidebar.active ul ul a {
padding: 10px !important;
}
/* line 61, app/assets/stylesheets/admins/sidebar.scss */
/* line 64, app/assets/stylesheets/admins/sidebar.scss */
#sidebar.active ul ul a span {
display: none;
}
/* line 63, app/assets/stylesheets/admins/sidebar.scss */
/* line 66, app/assets/stylesheets/admins/sidebar.scss */
#sidebar.active ul ul a i {
margin-left: 0px;
display: block;
@ -26195,7 +26199,7 @@ input.form-control {
height: 10px;
}
/* line 73, app/assets/stylesheets/admins/sidebar.scss */
/* line 76, app/assets/stylesheets/admins/sidebar.scss */
#sidebar .sidebar-header {
padding: 20px;
background: #272822;
@ -26208,7 +26212,30 @@ input.form-control {
justify-content: space-between;
}
/* line 81, app/assets/stylesheets/admins/sidebar.scss */
/* line 83, app/assets/stylesheets/admins/sidebar.scss */
#sidebar .sidebar-header-logo {
display: -webkit-box;
display: flex;
-webkit-box-pack: justify;
justify-content: space-between;
-webkit-box-align: center;
align-items: center;
}
/* line 88, app/assets/stylesheets/admins/sidebar.scss */
#sidebar .sidebar-header-logo > img {
width: 40px;
height: auto;
}
/* line 93, app/assets/stylesheets/admins/sidebar.scss */
#sidebar .sidebar-header-logo > .logo-label {
font-size: 18px;
color: darkgrey;
margin-left: 10px;
}
/* line 101, app/assets/stylesheets/admins/sidebar.scss */
#sidebar #sidebarCollapse {
display: -webkit-box;
display: flex;
@ -26220,7 +26247,7 @@ input.form-control {
text-align: right;
}
/* line 88, app/assets/stylesheets/admins/sidebar.scss */
/* line 108, app/assets/stylesheets/admins/sidebar.scss */
#sidebar #sidebarCollapse.active {
width: 40px;
height: 30px;
@ -26229,27 +26256,27 @@ input.form-control {
border-radius: 3px;
}
/* line 95, app/assets/stylesheets/admins/sidebar.scss */
/* line 115, app/assets/stylesheets/admins/sidebar.scss */
#sidebar #sidebarCollapse.active i.fold {
display: none;
}
/* line 96, app/assets/stylesheets/admins/sidebar.scss */
/* line 116, app/assets/stylesheets/admins/sidebar.scss */
#sidebar #sidebarCollapse.active i.unfold {
display: block;
}
/* line 99, app/assets/stylesheets/admins/sidebar.scss */
/* line 119, app/assets/stylesheets/admins/sidebar.scss */
#sidebar #sidebarCollapse i.fold {
display: block;
}
/* line 102, app/assets/stylesheets/admins/sidebar.scss */
/* line 122, app/assets/stylesheets/admins/sidebar.scss */
#sidebar #sidebarCollapse i.unfold {
display: none;
}
/* line 105, app/assets/stylesheets/admins/sidebar.scss */
/* line 125, app/assets/stylesheets/admins/sidebar.scss */
#sidebar a, #sidebar a:hover, #sidebar a:focus {
color: inherit;
text-decoration: none;
@ -26257,25 +26284,25 @@ input.form-control {
transition: all 0.3s;
}
/* line 111, app/assets/stylesheets/admins/sidebar.scss */
/* line 131, app/assets/stylesheets/admins/sidebar.scss */
#sidebar > ul > li > a > i {
width: 14px;
height: 14px;
}
/* line 117, app/assets/stylesheets/admins/sidebar.scss */
/* line 137, app/assets/stylesheets/admins/sidebar.scss */
#sidebar ul.components {
padding: 20px 0;
border-bottom: 1px solid #3f3f3f;
}
/* line 122, app/assets/stylesheets/admins/sidebar.scss */
/* line 142, app/assets/stylesheets/admins/sidebar.scss */
#sidebar ul p {
color: #fff;
padding: 10px;
}
/* line 127, app/assets/stylesheets/admins/sidebar.scss */
/* line 147, app/assets/stylesheets/admins/sidebar.scss */
#sidebar ul li > a {
padding: 10px;
font-size: 1em;
@ -26283,25 +26310,25 @@ input.form-control {
text-align: left;
}
/* line 133, app/assets/stylesheets/admins/sidebar.scss */
/* line 153, app/assets/stylesheets/admins/sidebar.scss */
#sidebar ul li > a i {
margin-right: 10px;
font-size: 1em;
margin-bottom: 5px;
}
/* line 141, app/assets/stylesheets/admins/sidebar.scss */
/* line 161, app/assets/stylesheets/admins/sidebar.scss */
#sidebar ul li a:hover, #sidebar ul li a.active {
color: #fff;
background: #276891;
}
/* line 147, app/assets/stylesheets/admins/sidebar.scss */
/* line 167, app/assets/stylesheets/admins/sidebar.scss */
#sidebar ul li.active > a, #sidebar ul a[aria-expanded="true"] {
color: #fff;
}
/* line 152, app/assets/stylesheets/admins/sidebar.scss */
/* line 172, app/assets/stylesheets/admins/sidebar.scss */
#sidebar ul ul a {
font-size: 0.9em !important;
padding-left: 30px !important;
@ -26309,7 +26336,7 @@ input.form-control {
}
@media (max-width: 768px) {
/* line 162, app/assets/stylesheets/admins/sidebar.scss */
/* line 182, app/assets/stylesheets/admins/sidebar.scss */
#sidebar.active {
padding: 10px 5px;
min-width: 40px;
@ -26319,39 +26346,39 @@ input.form-control {
-webkit-transform: none;
transform: none;
}
/* line 170, app/assets/stylesheets/admins/sidebar.scss */
/* line 190, app/assets/stylesheets/admins/sidebar.scss */
#sidebar.active .sidebar-header {
padding: 0px;
}
/* line 173, app/assets/stylesheets/admins/sidebar.scss */
/* line 193, app/assets/stylesheets/admins/sidebar.scss */
#sidebar.active .sidebar-header .sidebar-header-logo {
display: none;
}
/* line 177, app/assets/stylesheets/admins/sidebar.scss */
/* line 197, app/assets/stylesheets/admins/sidebar.scss */
#sidebar.active .sidebar-header #sidebarCollapse {
width: 30px;
height: 20px;
}
/* line 183, app/assets/stylesheets/admins/sidebar.scss */
/* line 203, app/assets/stylesheets/admins/sidebar.scss */
#sidebar.active ul li a {
padding: 10px;
font-size: 0.85em;
}
/* line 187, app/assets/stylesheets/admins/sidebar.scss */
/* line 207, app/assets/stylesheets/admins/sidebar.scss */
#sidebar.active ul li a i {
margin-right: 0;
display: block;
margin-bottom: 5px;
}
/* line 194, app/assets/stylesheets/admins/sidebar.scss */
/* line 214, app/assets/stylesheets/admins/sidebar.scss */
#sidebar.active > ul > li > a > i {
font-size: 1.8em;
}
/* line 198, app/assets/stylesheets/admins/sidebar.scss */
/* line 218, app/assets/stylesheets/admins/sidebar.scss */
#sidebar.active ul ul a {
padding: 10px !important;
}
/* line 207, app/assets/stylesheets/admins/sidebar.scss */
/* line 227, app/assets/stylesheets/admins/sidebar.scss */
.dropdown-toggle::after {
top: auto;
bottom: 10px;

@ -136202,7 +136202,7 @@ $(document).on('turbolinks:load', function(){
},
templateResult: function (item) {
if(!item.id || item.id === '') return item.text;
return $("<span>" + item.real_name + " <span class='font-12'>" + item.school_name + ' ' + item.hidden_phone + "</span></span>");
return $("<div class='row px-0'><span class='col-3'>" + item.real_name + "</span><span class='col-5 font-12'>" + item.school_name + "</span><span class='col-4 font-12'>" + item.hidden_phone + "</span></div>");
},
templateSelection: function(item){
if (item.id) {
@ -138478,6 +138478,56 @@ $(document).on('turbolinks:load', function() {
}
})
;
$(document).on('turbolinks:load', function() {
if ($('body.admins-subjects-index-page').length > 0) {
var $form = $('.subject-list-form');
// ************** 学校选择 *************
$form.find('.school-select').select2({
theme: 'bootstrap4',
placeholder: '请选择创建者单位',
minimumInputLength: 1,
ajax: {
delay: 500,
url: '/api/schools/for_option.json',
dataType: 'json',
data: function(params){
return { keyword: params.term };
},
processResults: function(data){
return { results: data.schools }
}
},
templateResult: function (item) {
if(!item.id || item.id === '') return item.text;
return item.name;
},
templateSelection: function(item){
if (item.id) {
}
return item.name || item.text;
}
});
// 清空
$form.on('click', '.clear-btn', function(){
$form.find('select[name="status"]').val('');
$form.find('.school-select').val('').trigger('change');
$form.find('input[name="keyword"]').val('');
$form.find('#homepage_show').attr('checked', false);
$form.find('#excellent').attr('checked', false);
$form.find('input[type="submit"]').trigger('click');
})
// 上传图片
$('.modal.admin-upload-file-modal').on('upload:success', function(e, data){
var $imageElement = $('.subject-image-' + data.source_id);
$imageElement.attr('src', data.url);
$imageElement.show();
$imageElement.next().html('重新上传');
})
}
});
$(document).on('turbolinks:load', function() {
if ($('body.admins-user-statistics-index-page').length > 0) {
var $form = $('.user-statistic-list-form');

@ -1079,14 +1079,14 @@
<div class="name">下降</div>
<div class="code-name">&amp;#xe669;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe800;</span>
<div class="name">复制</div>
<div class="code-name">&amp;#xe800;</div>
<li class="dib">
<span class="icon iconfont">&#xe800;</span>
<div class="name">复制</div>
<div class="code-name">&amp;#xe800;</div>
</li>
<li class="dib">
<li class="dib">
<span class="icon iconfont">&#xe7f9;</span>
<div class="name">更多</div>
<div class="code-name">&amp;#xe7f9;</div>
@ -1212,6 +1212,12 @@
<div class="code-name">&amp;#xe604;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe6d3;</span>
<div class="name">主页</div>
<div class="code-name">&amp;#xe6d3;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe6a3;</span>
<div class="name">yunweijiankong</div>
@ -1302,6 +1308,12 @@
<div class="code-name">&amp;#xe6b6;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe6bf;</span>
<div class="name">统计</div>
<div class="code-name">&amp;#xe6bf;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe6b8;</span>
<div class="name">menu_3voucher</div>
@ -1343,31 +1355,31 @@
<div class="name">nenghaofenxi@1x</div>
<div class="code-name">&amp;#xe6be;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe6c1;</span>
<div class="name">detection@1x</div>
<div class="code-name">&amp;#xe6c1;</div>
<li class="dib">
<span class="icon iconfont">&#xe6c1;</span>
<div class="name">detection@1x</div>
<div class="code-name">&amp;#xe6c1;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe6c2;</span>
<div class="name">community@1x</div>
<div class="code-name">&amp;#xe6c2;</div>
<li class="dib">
<span class="icon iconfont">&#xe6c2;</span>
<div class="name">community@1x</div>
<div class="code-name">&amp;#xe6c2;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe6c3;</span>
<div class="name">hosting@1x</div>
<div class="code-name">&amp;#xe6c3;</div>
<li class="dib">
<span class="icon iconfont">&#xe6c3;</span>
<div class="name">hosting@1x</div>
<div class="code-name">&amp;#xe6c3;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe6c4;</span>
<div class="name">project@1x</div>
<div class="code-name">&amp;#xe6c4;</div>
<li class="dib">
<span class="icon iconfont">&#xe6c4;</span>
<div class="name">project@1x</div>
<div class="code-name">&amp;#xe6c4;</div>
</li>
</ul>
<div class="article markdown">
<h2 id="unicode-">Unicode 引用</h2>
@ -2992,17 +3004,17 @@
<div class="code-name">.icon-xiajiang
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-fuzhi1"></span>
<div class="name">
复制
</div>
<div class="code-name">.icon-fuzhi1
</div>
</li>
<li class="dib">
<li class="dib">
<span class="icon iconfont icon-fuzhi1"></span>
<div class="name">
复制
</div>
<div class="code-name">.icon-fuzhi1
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-gengduo1"></span>
<div class="name">
更多
@ -3191,6 +3203,15 @@
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-zhuye"></span>
<div class="name">
主页
</div>
<div class="code-name">.icon-zhuye
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-yunweijiankong"></span>
<div class="name">
@ -3326,6 +3347,15 @@
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-tongji"></span>
<div class="name">
统计
</div>
<div class="code-name">.icon-tongji
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-menu_voucher"></span>
<div class="name">
@ -3388,43 +3418,43 @@
<div class="code-name">.icon-nenghaofenxix
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-detectionx"></span>
<div class="name">
detection@1x
</div>
<div class="code-name">.icon-detectionx
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-communityx"></span>
<div class="name">
community@1x
</div>
<div class="code-name">.icon-communityx
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-hostingx2"></span>
<div class="name">
hosting@1x
</div>
<div class="code-name">.icon-hostingx2
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-projectx"></span>
<div class="name">
project@1x
</div>
<div class="code-name">.icon-projectx
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-detectionx"></span>
<div class="name">
detection@1x
</div>
<div class="code-name">.icon-detectionx
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-communityx"></span>
<div class="name">
community@1x
</div>
<div class="code-name">.icon-communityx
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-hostingx2"></span>
<div class="name">
hosting@1x
</div>
<div class="code-name">.icon-hostingx2
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-projectx"></span>
<div class="name">
project@1x
</div>
<div class="code-name">.icon-projectx
</div>
</li>
</ul>
<div class="article markdown">
<h2 id="font-class-">font-class 引用</h2>
@ -4853,16 +4883,16 @@
<div class="name">下降</div>
<div class="code-name">#icon-xiajiang</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-fuzhi1"></use>
</svg>
<div class="name">复制</div>
<div class="code-name">#icon-fuzhi1</div>
</li>
<li class="dib">
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-fuzhi1"></use>
</svg>
<div class="name">复制</div>
<div class="code-name">#icon-fuzhi1</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-gengduo1"></use>
</svg>
@ -5030,6 +5060,14 @@
<div class="code-name">#icon-tianjiadaohang</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-zhuye"></use>
</svg>
<div class="name">主页</div>
<div class="code-name">#icon-zhuye</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-yunweijiankong"></use>
@ -5150,6 +5188,14 @@
<div class="code-name">#icon-xuexizhongxin</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-tongji"></use>
</svg>
<div class="name">统计</div>
<div class="code-name">#icon-tongji</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-menu_voucher"></use>
@ -5205,38 +5251,38 @@
<div class="name">nenghaofenxi@1x</div>
<div class="code-name">#icon-nenghaofenxix</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-detectionx"></use>
</svg>
<div class="name">detection@1x</div>
<div class="code-name">#icon-detectionx</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-communityx"></use>
</svg>
<div class="name">community@1x</div>
<div class="code-name">#icon-communityx</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-hostingx2"></use>
</svg>
<div class="name">hosting@1x</div>
<div class="code-name">#icon-hostingx2</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-projectx"></use>
</svg>
<div class="name">project@1x</div>
<div class="code-name">#icon-projectx</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-detectionx"></use>
</svg>
<div class="name">detection@1x</div>
<div class="code-name">#icon-detectionx</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-communityx"></use>
</svg>
<div class="name">community@1x</div>
<div class="code-name">#icon-communityx</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-hostingx2"></use>
</svg>
<div class="name">hosting@1x</div>
<div class="code-name">#icon-hostingx2</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-projectx"></use>
</svg>
<div class="name">project@1x</div>
<div class="code-name">#icon-projectx</div>
</li>
</ul>
<div class="article markdown">

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -1384,6 +1384,13 @@
"unicode": "e604",
"unicode_decimal": 58884
},
{
"icon_id": "8361866",
"name": "主页",
"font_class": "zhuye",
"unicode": "e6d3",
"unicode_decimal": 59091
},
{
"icon_id": "9219273",
"name": "yunweijiankong",
@ -1489,6 +1496,13 @@
"unicode": "e6b6",
"unicode_decimal": 59062
},
{
"icon_id": "10527626",
"name": "统计",
"font_class": "tongji",
"unicode": "e6bf",
"unicode_decimal": 59071
},
{
"icon_id": "10610051",
"name": "menu_3voucher",

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 303 KiB

After

Width:  |  Height:  |  Size: 306 KiB

@ -268,7 +268,7 @@ class CompetitionCommon extends Component{
<Row className={"CompetitionCommonbanner"}>
{data.competition_status==="nearly_published"?
this.props.current_user&&this.props.current_user.admin===true?"":this.props.current_user&&this.props.current_user.business===true?"":<div className={"CompetitionsListzhezhao"}>即将发布 敬请期待</div>:""}
data&&data.permission.editable===true?"":<div className={"CompetitionsListzhezhao"}>即将发布 敬请期待</div>:""}
<img className={"Commonimg"}
src={data.competition_status==="ended"?getImageUrl(`images/educoder/competitions/groups1.png`):data.competition_status==="nearly_published"?getImageUrl(`images/educoder/competitions/groups2.png`):data.competition_status==="progressing"?getImageUrl(`images/educoder/competitions/groups3.png`):""} />
<Col span={15} className={"Commonimgbox"}>
@ -334,7 +334,7 @@ class CompetitionCommon extends Component{
<Button type="primary" block className={"Competitionfontsize22"} disabled={true}>
已结束
</Button>:data.enroll_end===true?<Button type="primary" block className={"Competitionfontsize22"} disabled={true}>
报名截止
{data.competition_status==="nearly_published"?"未发布":"报名截止"}
</Button>:
data.competition_status==="progressing"?<Button type="primary" block className={"Competitionfontsize22"}>
{data.mode===2?<a onClick={()=>this.gotocourse()}>立即报名</a>:<a onClick={()=>this.gotocourse(`/competitions/${this.props.match.params.identifier}/enroll`)}></a>}

@ -19,13 +19,13 @@ class CompetitionContents extends Component{
}
render() {
let{mdContentdata}=this.props;
let{mdContentdata,data}=this.props;
//mdhash滚动
this.props.MdifHasAnchorJustScorll();
return (
<div className={"fr"}>
{this.props.current_user&&this.props.current_user.admin===true||this.props.current_user&&this.props.current_user.business===true?this.props.Competitionedittype===false?this.props.has_url===false?<Button className={"fr"} type="primary" ghost onClick={()=>this.props.Competitionedit()}>
{data&&data.permission.editable===true?this.props.Competitionedittype===false?this.props.has_url===false?<Button className={"fr"} type="primary" ghost onClick={()=>this.props.Competitionedit()}>
编辑
</Button>:"":"":""}
<div className={this.props.current_user&&this.props.current_user.admin===true||this.props.current_user&&this.props.current_user.business===true?"mt50 mb100 ":"mb100 "}>

@ -115,8 +115,8 @@ class CompetitionContents extends Component{
},
];
const data = [];
let {chart_rules,chartdata}=this.props;
const datas = [];
let {chart_rules,chartdata,data}=this.props;
let {personal}=this.state;
chartdata===undefined?"":chartdata.teams.length===0||chartdata.teams.length<3?"":chartdata.teams.map((item,key)=>{
@ -130,7 +130,7 @@ class CompetitionContents extends Component{
score:item.score,
user_login:item.user_login
}
data.push(list)
datas.push(list)
}
})
@ -139,7 +139,7 @@ class CompetitionContents extends Component{
//console.log(chartdata&&chartdata.teams)
return (
<div>
{chart_rules===undefined?"":<Tabs onChange={(e)=>this.props.Competitioncallback(e)} activeKey={this.props.tabkey} tabBarExtraContent={this.props.current_user&&this.props.current_user.admin===true||this.props.current_user&&this.props.current_user.business===true?this.props.Competitionedittype===false?this.props.has_url===false?operations:"":"":""}>
{chart_rules===undefined?"":<Tabs onChange={(e)=>this.props.Competitioncallback(e)} activeKey={this.props.tabkey} tabBarExtraContent={data&&data.permission.editable===true?this.props.Competitionedittype===false?this.props.has_url===false?operations:"":"":""}>
{chart_rules.stages.map((item,key)=>{
return(
<TabPane tab={item.name} key={item.id===null?0:item.id}>
@ -343,7 +343,7 @@ class CompetitionContents extends Component{
`
}
</style>
{chartdata===undefined?"":chartdata.teams.length===0||chartdata.teams.length<4?"":<Table className="Competitiontransparent" columns={columns} dataSource={data} showHeader={false} pagination={false}/>}
{chartdata===undefined?"":chartdata.teams.length===0||chartdata.teams.length<4?"":<Table className="Competitiontransparent" columns={columns} dataSource={datas} showHeader={false} pagination={false}/>}
</Row>

@ -925,6 +925,14 @@ class CoursesIndex extends Component{
}
></Route>
{/*课堂统计列表2019.10.29 */}
<Route path="/courses/:coursesId/statistics"
render={
(props) => (<ListPageIndex {...this.props} {...props} {...this.state} />)
}
></Route>
{/*/!*实训作业and课堂详情页*!/*/}
<Route path="/courses/:coursesId"
render={

@ -40,11 +40,18 @@ const CourseGroupList= Loadable({
});
const Eduinforms= Loadable({
loader: () => import('./gradinforms/Eduinforms.js'),
loader: () => import('./gradinforms/Eduinforms'),
loading: Loading,
});
//2019.10.29 统计
const Statistics=Loadable({
loader: () => import('./statistics/Statistics'),
loading: Loading,
});
const Elearning= Loadable({
loader: () => import('./elearning/Elearning.js'),
loader: () => import('./elearning/Elearning'),
loading: Loading,
});
//
@ -268,6 +275,15 @@ class ListPageIndex extends Component{
}
></Route>
{/*课堂统计列表2019.10.29 */}
<Route path="/courses/:coursesId/statistics"
render={
(props) => (<Statistics {...this.props} {...props} {...this.state} />)
}
></Route>
{/*公告栏列表*/}
<Route path="/courses/:coursesId/informs"

@ -1030,7 +1030,8 @@ class Coursesleftnav extends Component{
item.type==="poll"?<i className={this.props.location.pathname===item.category_url?"color-blue iconfont icon-wenjuan mr10 fl":"iconfont icon-wenjuan mr10 fl"}></i>:
item.type==="attachment"?<i className={this.props.location.pathname===item.category_url?"color-blue iconfont icon-ziyuan mr10 fl":"iconfont icon-ziyuan mr10 fl"} ></i>:
item.type==="board"?<i className={this.props.location.pathname===item.category_url?"color-blue iconfont icon-taolun mr10 fl":"iconfont icon-taolun mr10 fl"} ></i>:
item.type==="course_group"?<i className={this.props.location.pathname===item.category_url?"color-blue iconfont icon-fenban mr10 fl":"iconfont icon-fenban mr10 fl"} ></i>:""
item.type==="course_group"?<i className={this.props.location.pathname===item.category_url?"color-blue iconfont icon-fenban mr10 fl":"iconfont icon-fenban mr10 fl"} ></i>:
item.type==="statistics"?<i className={this.props.location.pathname===item.category_url?"color-blue iconfont icon-tongji mr10 fl":"iconfont icon-tongji mr10 fl"} ></i>:""
}
{/*||this.props.location.pathname===this.state.url&&key===this.state.indexs*/}

@ -0,0 +1,67 @@
.height-60{
line-height: 60px;
height:60px;
background:rgba(255,208,88,1);
border-radius:4px 4px 0px 0px;
}
.height-40{
line-height: 40px;
height:40px;
background:rgba(224,229,234,1);
border-radius:4px 0px 0px 0px;
}
.height-20{
line-height: 20px;
height:20px;
background:rgba(229,168,102,1);
border-radius:0px 4px 0px 0px;
}
.Statisticscenter{
text-align: center;
}
.Statisticscenter div:nth-child(1){
margin-top: 5px;
font-size:12px;
color:rgba(51,51,51,1);
}
.Statisticscenter div:nth-child(2){
margin-top: 5px;
font-size: 12px;
color: rgba(153,153,153,1);
}
.rankingss {
text-align: center;
margin-top: 40px;
}
.rankingss a img {
width: 60px;
height: 60px;
border-radius: 50%;
box-shadow: 0px 0px 12px rgba(0,0,0,0.2);
}
.huangguans{
position: absolute;
top: -30px;
left: 72px;
}
.relatives{
position: relative;
}
.statisticsTabs{
padding: 30px;
padding-top: 0px;
}
.statisticsTabs .ant-tabs-tab{
height: 80px;
text-align: center;
line-height: 61px;
font-size: 16px;
color: rgba(80,145,255,1);
}

@ -0,0 +1,138 @@
import React,{ Component } from "react";
import {Table, Pagination,Tooltip,Spin, Row, Col ,Tabs} from "antd";
import { WordsBtn,on, off, trigger } from 'educoder';
import {BrowserRouter as Router,Route,Switch,Link} from 'react-router-dom';
import axios from'axios';
import './Statistics.css';
const { TabPane } = Tabs;
class Statistics extends Component{
constructor(props){
super(props);
this.state={
nd1:60,
nd2:40,
nd3:20
}
}
componentDidMount() {
this.setState({
isSpin:true,
})
}
callback=(key)=>{
console.log(key);
}
render(){
let {nd1,nd2,nd3}=this.state;
return(
<React.Fragment >
<div>
<div className="edu-back-white">
<p className="clearfix padding30">
<Row gutter={24}>
<Col>
明星学员
</Col>
</Row>
<Row type="flex" justify="center" align="bottom">
<Col span={3}>
<li className="pr rankingss">
<a href="https://test-newweb.educoder.net/users/cao_jl" className="color-dark">
<img src="https://test-newweb.educoder.net/images/avatars/User/g"/>
</a>
</li>
</Col>
<Col span={5}>
<li className="pr rankingss">
<a href="https://test-newweb.educoder.net/users/cao_jl" className="color-dark">
<img src="https://test-newweb.educoder.net/images/avatars/User/g" className={"mb10"}/>
</a>
</li>
<Col className={`height-${nd2}`}>
</Col>
</Col>
<Col span={5} className={"relatives"}>
<li className="pr rankingss">
<img src="https://test-newweb.educoder.net/images/educoder/huangguan.png" className="huangguans mb5" />
<a href="https://test-newweb.educoder.net/users/cao_jl" className="color-dark">
<img src="https://test-newweb.educoder.net/images/avatars/User/g" className={"mb10"}/>
</a>
</li>
<Col className={`height-${nd1}`}>
</Col>
</Col>
<Col span={5}>
<li className="pr rankingss">
<a href="https://test-newweb.educoder.net/users/cao_jl" className="color-dark">
<img src="https://test-newweb.educoder.net/images/avatars/User/g" className={"mb10"}/>
</a>
</li>
<Col className={`height-${nd3}`}>
</Col>
</Col>
<Col span={3}>
<li className="pr rankingss">
<a href="https://test-newweb.educoder.net/users/cao_jl" className="color-dark">
<img src="https://test-newweb.educoder.net/images/avatars/User/g"/>
</a>
</li>
</Col>
</Row>
<Row className="mt10" type="flex" justify="center" align="bottom">
<Col span={3} className={"Statisticscenter"}>
<Col>威震江湖</Col>
<Col>4th</Col>
</Col>
<Col span={5} className={"Statisticscenter"}>
<Col>神魔遮天</Col>
<Col>2th</Col>
</Col>
<Col span={5} className={"Statisticscenter"}>
<Col>雄霸天下</Col>
<Col>1th</Col>
</Col>
<Col span={5} className={"Statisticscenter"}>
<Col>不灭战神</Col>
<Col>3th</Col>
</Col>
<Col span={3} className={"Statisticscenter"}>
<Col>霸气初现</Col>
<Col>5th</Col>
</Col>
</Row>
</p>
</div>
<div className="mt20 edu-back-white">
<Tabs className="statisticsTabs" defaultActiveKey="1" onChange={this.callback}>
<TabPane tab="学习成绩" key="1" className={"statisticsTabs1"}>
Content of Tab Pane 1
</TabPane>
<TabPane tab="课堂活跃度" key="2">
Content of Tab Pane 2
</TabPane>
</Tabs>
</div>
</div>
</React.Fragment>
)
}
}
export default Statistics;

@ -1079,14 +1079,14 @@
<div class="name">下降</div>
<div class="code-name">&amp;#xe669;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe800;</span>
<div class="name">复制</div>
<div class="code-name">&amp;#xe800;</div>
<li class="dib">
<span class="icon iconfont">&#xe800;</span>
<div class="name">复制</div>
<div class="code-name">&amp;#xe800;</div>
</li>
<li class="dib">
<li class="dib">
<span class="icon iconfont">&#xe7f9;</span>
<div class="name">更多</div>
<div class="code-name">&amp;#xe7f9;</div>
@ -1212,6 +1212,12 @@
<div class="code-name">&amp;#xe604;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe6d3;</span>
<div class="name">主页</div>
<div class="code-name">&amp;#xe6d3;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe6a3;</span>
<div class="name">yunweijiankong</div>
@ -1302,6 +1308,12 @@
<div class="code-name">&amp;#xe6b6;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe6bf;</span>
<div class="name">统计</div>
<div class="code-name">&amp;#xe6bf;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe6b8;</span>
<div class="name">menu_3voucher</div>
@ -1343,31 +1355,31 @@
<div class="name">nenghaofenxi@1x</div>
<div class="code-name">&amp;#xe6be;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe6c1;</span>
<div class="name">detection@1x</div>
<div class="code-name">&amp;#xe6c1;</div>
<li class="dib">
<span class="icon iconfont">&#xe6c1;</span>
<div class="name">detection@1x</div>
<div class="code-name">&amp;#xe6c1;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe6c2;</span>
<div class="name">community@1x</div>
<div class="code-name">&amp;#xe6c2;</div>
<li class="dib">
<span class="icon iconfont">&#xe6c2;</span>
<div class="name">community@1x</div>
<div class="code-name">&amp;#xe6c2;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe6c3;</span>
<div class="name">hosting@1x</div>
<div class="code-name">&amp;#xe6c3;</div>
<li class="dib">
<span class="icon iconfont">&#xe6c3;</span>
<div class="name">hosting@1x</div>
<div class="code-name">&amp;#xe6c3;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe6c4;</span>
<div class="name">project@1x</div>
<div class="code-name">&amp;#xe6c4;</div>
<li class="dib">
<span class="icon iconfont">&#xe6c4;</span>
<div class="name">project@1x</div>
<div class="code-name">&amp;#xe6c4;</div>
</li>
</ul>
<div class="article markdown">
<h2 id="unicode-">Unicode 引用</h2>
@ -2992,17 +3004,17 @@
<div class="code-name">.icon-xiajiang
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-fuzhi1"></span>
<div class="name">
复制
</div>
<div class="code-name">.icon-fuzhi1
</div>
</li>
<li class="dib">
<li class="dib">
<span class="icon iconfont icon-fuzhi1"></span>
<div class="name">
复制
</div>
<div class="code-name">.icon-fuzhi1
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-gengduo1"></span>
<div class="name">
更多
@ -3191,6 +3203,15 @@
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-zhuye"></span>
<div class="name">
主页
</div>
<div class="code-name">.icon-zhuye
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-yunweijiankong"></span>
<div class="name">
@ -3326,6 +3347,15 @@
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-tongji"></span>
<div class="name">
统计
</div>
<div class="code-name">.icon-tongji
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-menu_voucher"></span>
<div class="name">
@ -3388,43 +3418,43 @@
<div class="code-name">.icon-nenghaofenxix
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-detectionx"></span>
<div class="name">
detection@1x
</div>
<div class="code-name">.icon-detectionx
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-communityx"></span>
<div class="name">
community@1x
</div>
<div class="code-name">.icon-communityx
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-hostingx2"></span>
<div class="name">
hosting@1x
</div>
<div class="code-name">.icon-hostingx2
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-projectx"></span>
<div class="name">
project@1x
</div>
<div class="code-name">.icon-projectx
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-detectionx"></span>
<div class="name">
detection@1x
</div>
<div class="code-name">.icon-detectionx
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-communityx"></span>
<div class="name">
community@1x
</div>
<div class="code-name">.icon-communityx
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-hostingx2"></span>
<div class="name">
hosting@1x
</div>
<div class="code-name">.icon-hostingx2
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-projectx"></span>
<div class="name">
project@1x
</div>
<div class="code-name">.icon-projectx
</div>
</li>
</ul>
<div class="article markdown">
<h2 id="font-class-">font-class 引用</h2>
@ -4853,16 +4883,16 @@
<div class="name">下降</div>
<div class="code-name">#icon-xiajiang</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-fuzhi1"></use>
</svg>
<div class="name">复制</div>
<div class="code-name">#icon-fuzhi1</div>
</li>
<li class="dib">
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-fuzhi1"></use>
</svg>
<div class="name">复制</div>
<div class="code-name">#icon-fuzhi1</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-gengduo1"></use>
</svg>
@ -5030,6 +5060,14 @@
<div class="code-name">#icon-tianjiadaohang</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-zhuye"></use>
</svg>
<div class="name">主页</div>
<div class="code-name">#icon-zhuye</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-yunweijiankong"></use>
@ -5150,6 +5188,14 @@
<div class="code-name">#icon-xuexizhongxin</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-tongji"></use>
</svg>
<div class="name">统计</div>
<div class="code-name">#icon-tongji</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-menu_voucher"></use>
@ -5205,38 +5251,38 @@
<div class="name">nenghaofenxi@1x</div>
<div class="code-name">#icon-nenghaofenxix</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-detectionx"></use>
</svg>
<div class="name">detection@1x</div>
<div class="code-name">#icon-detectionx</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-communityx"></use>
</svg>
<div class="name">community@1x</div>
<div class="code-name">#icon-communityx</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-hostingx2"></use>
</svg>
<div class="name">hosting@1x</div>
<div class="code-name">#icon-hostingx2</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-projectx"></use>
</svg>
<div class="name">project@1x</div>
<div class="code-name">#icon-projectx</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-detectionx"></use>
</svg>
<div class="name">detection@1x</div>
<div class="code-name">#icon-detectionx</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-communityx"></use>
</svg>
<div class="name">community@1x</div>
<div class="code-name">#icon-communityx</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-hostingx2"></use>
</svg>
<div class="name">hosting@1x</div>
<div class="code-name">#icon-hostingx2</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-projectx"></use>
</svg>
<div class="name">project@1x</div>
<div class="code-name">#icon-projectx</div>
</li>
</ul>
<div class="article markdown">

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -1384,6 +1384,13 @@
"unicode": "e604",
"unicode_decimal": 58884
},
{
"icon_id": "8361866",
"name": "主页",
"font_class": "zhuye",
"unicode": "e6d3",
"unicode_decimal": 59091
},
{
"icon_id": "9219273",
"name": "yunweijiankong",
@ -1489,6 +1496,13 @@
"unicode": "e6b6",
"unicode_decimal": 59062
},
{
"icon_id": "10527626",
"name": "统计",
"font_class": "tongji",
"unicode": "e6bf",
"unicode_decimal": 59071
},
{
"icon_id": "10610051",
"name": "menu_3voucher",

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 303 KiB

After

Width:  |  Height:  |  Size: 306 KiB

Loading…
Cancel
Save