Merge branches 'dev_aliyun' and 'topic_bank' of https://bdgit.educoder.net/Hjqreturn/educoder into topic_bank

# Conflicts:
#	public/react/src/modules/courses/Index.js
dev_aliyun_beta
杨树明 6 years ago
commit b10d9e8ebd

@ -0,0 +1,62 @@
$(document).on('turbolinks:load', function() {
var $modal = $('.modal.admin-upload-file-modal');
if ($modal.length > 0) {
var $form = $modal.find('form.admin-upload-file-form')
var $sourceIdInput = $modal.find('input[name="source_id"]');
var $sourceTypeInput = $modal.find('input[name="source_type"]');
$modal.on('show.bs.modal', function(event){
var $link = $(event.relatedTarget);
var sourceId = $link.data('sourceId');
var sourceType = $link.data('sourceType');
$sourceIdInput.val(sourceId);
$sourceTypeInput.val(sourceType);
$modal.find('.upload-file-input').trigger('click');
});
$modal.find('.upload-file-input').on('change', function(e){
var file = $(this)[0].files[0];
if(file){
$modal.find('.file-names').html(file.name);
$modal.find('.submit-btn').trigger('click');
}
})
var formValid = function(){
if($form.find('input[name="file"]').val() == undefined || $form.find('input[name="file"]').val().length == 0){
$form.find('.error').html('请选择文件');
return false;
}
return true;
};
$modal.on('click', '.submit-btn', function(){
$form.find('.error').html('');
if (formValid()) {
var formDataString = $form.serialize();
$.ajax({
method: 'POST',
dataType: 'json',
url: '/admins/files?' + formDataString,
data: new FormData($form[0]),
processData: false,
contentType: false,
success: function(data){
$.notify({ message: '上传成功' });
$modal.trigger('upload:success', data);
$modal.modal('hide');
},
error: function(res){
var data = res.responseJSON;
$form.find('.error').html(data.message);
}
});
}
});
}
});

@ -28,6 +28,13 @@ $(document).on('turbolinks:load', function() {
data: json data: json
}) })
}) })
$('.modal.admin-upload-file-modal').on('upload:success', function(e, data){
var $imageElement = $('.shixun-image-' + data.source_id);
$imageElement.attr('src', data.url);
$imageElement.show();
$imageElement.next().html('重新上传');
})
} }
}); });

@ -19,6 +19,7 @@ body {
align-items: stretch; align-items: stretch;
font-size: 14px; font-size: 14px;
background: #efefef; background: #efefef;
overflow: hidden;
} }
.simple_form { .simple_form {

@ -1,14 +1,22 @@
input[type="checkbox"]{ .admins-shixun-settings-index-page {
input[type="checkbox"]{
font-size:18px; font-size:18px;
} }
.select2 input::-webkit-input-placeholder{ .select2 input::-webkit-input-placeholder{
color:#ccc; color:#ccc;
} }
.select2 .select2-selection__choice{ .select2 .select2-selection__choice{
border: 1px solid #eee !important; border: 1px solid #eee !important;
} }
.setting-chosen{ .setting-chosen{
font-weight: 400; font-weight: 400;
font-size: 10px; font-size: 10px;
color:#333; color:#333;
}
.shixun-setting-image {
display: flex;
flex-direction: column;
align-items: center;
}
} }

@ -20,6 +20,11 @@ label.error {
input.form-control { input.form-control {
font-size: 14px; font-size: 14px;
} }
.input-group-prepend {
.input-group-text {
font-size: 14px;
}
}
.flex-1 { .flex-1 {
flex: 1; flex: 1;

@ -0,0 +1,54 @@
class Admins::FilesController < Admins::BaseController
before_action :convert_file!, only: [:create]
def create
File.delete(file_path) if File.exist?(file_path) # 删除之前的文件
Util.write_file(@file, file_path)
render_ok(source_id: params[:source_id], source_type: params[:source_type].to_s, url: file_url)
rescue StandardError => ex
logger_error(ex)
render_error('上传失败')
end
private
def convert_file!
max_size = 10 * 1024 * 1024 # 10M
if params[:file].class == ActionDispatch::Http::UploadedFile
@file = params[:file]
render_error('请上传文件') if @file.size.zero?
render_error('文件大小超过限制') if @file.size > max_size
else
file = params[:file].to_s.strip
return render_error('请上传正确的图片') if file.blank?
@file = Util.convert_base64_image(file, max_size: max_size)
end
rescue Base64ImageConverter::Error => ex
render_error(ex.message)
end
def file_path
@_file_path ||= begin
case params[:source_type].to_s
when 'Shixun' then
disk_filename('Shixun', params[:source_id])
else
disk_filename(params[:source_type].to_s, params[:source_id].to_s)
end
end
end
def disk_filename(type, id)
File.join(storage_path, type.to_s, id.to_s)
end
def storage_path
@_storage_path ||= File.join(Rails.root, 'public', 'images', 'avatars')
end
def file_url
File.join('/images/avatars/', params[:source_type].to_s, params[:source_id].to_s)
end
end

@ -46,9 +46,9 @@ module GitCommon
# 为版本库添加文件 # 为版本库添加文件
def add_file def add_file
@path, message, content = params[:path].strip, params[:message], params[:content] @path, message, content = params[:path].strip, params[:message], params[:content]
author_name, author_email = current_user.real_name, current_user.current_user.git_mail author_name, author_email = current_user.real_name, current_user.git_mail
@content = GitService.update_file(repo_path: @repo_path, @content = GitService.update_file(repo_path: @repo_path,
file_path: path, file_path: @path,
message: message, message: message,
content: content, content: content,
author_name: author_name, author_name: author_name,

@ -1238,7 +1238,8 @@ class CoursesController < ApplicationController
end end
tip_exception("课堂所属单位不能为空!") if params[:school].blank? tip_exception("课堂所属单位不能为空!") if params[:school].blank?
tip_exception("请至少添加一个课堂模块") if params[:course_module_types].blank? tip_exception("请至少添加一个课堂模块") if params[:course_module_types].blank?
@school = School.find_by!(name: params[:school].strip) @school = School.find_by(name: params[:school].strip)
tip_exception("所属单位不存在") unless @school.present?
end end
def validate_start_end_date def validate_start_end_date

@ -3,11 +3,14 @@ class ShixunsController < ApplicationController
include ApplicationHelper include ApplicationHelper
before_action :require_login, :check_auth, except: [:download_file, :index, :menus, :show, :show_right, :ranking_list, before_action :require_login, :check_auth, except: [:download_file, :index, :menus, :show, :show_right, :ranking_list,
:discusses, :collaborators, :fork_list, :propaedeutics] :discusses, :collaborators, :fork_list, :propaedeutics, :add_file]
before_action :check_account, only: [:new, :create, :shixun_exec] before_action :check_account, only: [:new, :create, :shixun_exec]
before_action :find_shixun, except: [:index, :new, :create, :menus, :get_recommend_shixuns,
:propaedeutics, :departments, :apply_shixun_mirror,
:get_mirror_script, :download_file]
before_action :find_shixun, :shixun_access_allowed, except: [:index, :new, :create, :menus, :get_recommend_shixuns, before_action :shixun_access_allowed, except: [:index, :new, :create, :menus, :get_recommend_shixuns, :add_file,
:propaedeutics, :departments, :apply_shixun_mirror, :propaedeutics, :departments, :apply_shixun_mirror,
:get_mirror_script, :download_file] :get_mirror_script, :download_file]
before_action :find_repo_name, only: [:repository, :commits, :file_content, :update_file, :shixun_exec, :copy] before_action :find_repo_name, only: [:repository, :commits, :file_content, :update_file, :shixun_exec, :copy]

@ -1,4 +1,5 @@
class Users::QuestionBanksController < Users::BaseController class Users::QuestionBanksController < Users::BaseController
before_action :require_login
before_action :check_query_params! before_action :check_query_params!
before_action :check_user_permission! before_action :check_user_permission!
@ -62,12 +63,10 @@ class Users::QuestionBanksController < Users::BaseController
end end
def check_user_permission! def check_user_permission!
return if User.current.admin? || (observed_logged_user? && read_question_bank_permission?) if params[:type] == 'publicly'
render_error("未通过职业认证") unless User.current.admin? || User.current.certification_teacher?
render_forbidden else
render_forbidden unless User.current.admin? || User.current.is_teacher?
end end
def read_question_bank_permission?
params[:type] == 'personal' ? User.current.is_teacher? : User.current.certification_teacher?
end end
end end

@ -314,8 +314,8 @@ class HomeworksService
if work.work_status != 0 if work.work_status != 0
if myshixun_endtime.present? if myshixun_endtime.present?
work.cost_time = myshixun_endtime.to_i - setting_time.publish_time.to_i work_cost_time = myshixun_endtime.to_i - setting_time.publish_time.to_i
work.cost_time = work_cost_time > 0 ? work_cost_time : games.select{|game| game.status == 2}.pluck(:cost_time).sum
efficiency = (pass_consume_time == 0 ? 0 : Math.log((user_total_score / pass_consume_time.to_f) + 1.0)) efficiency = (pass_consume_time == 0 ? 0 : Math.log((user_total_score / pass_consume_time.to_f) + 1.0))
work.efficiency = format("%.2f", efficiency) work.efficiency = format("%.2f", efficiency)

@ -2,7 +2,7 @@
<div class="modal-dialog modal-dialog-centered" role="document"> <div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h5 class="modal-title" id="exampleModalLongTitle">拒绝原因</h5> <h5 class="modal-title">拒绝原因</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close"> <button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span> <span aria-hidden="true">&times;</span>
</button> </button>

@ -0,0 +1,32 @@
<div class="modal fade admin-upload-file-modal" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title"><%= title ||= '上传文件' %></h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<form class="admin-upload-file-form" enctype="multipart/form-data">
<%= hidden_field_tag(:source_type, nil) %>
<%= hidden_field_tag(:source_id, nil) %>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text">文件</span>
</div>
<div class="custom-file">
<input type="file" name="file" class="upload-file-input" id="upload-file-input">
<label class="custom-file-label file-names" for="upload-file-input">选择文件</label>
</div>
</div>
<div class="error text-danger"></div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
<button type="button" class="btn btn-primary submit-btn" data-disable-with="上传中...">上传</button>
</div>
</div>
</div>
</div>

@ -74,3 +74,4 @@
<%= render partial: 'admins/shixun_settings/shared/list', locals: { shixun_settings: @shixun_settings } %> <%= render partial: 'admins/shixun_settings/shared/list', locals: { shixun_settings: @shixun_settings } %>
</div> </div>
<%= render partial: 'admins/shared/modal/upload_file_modal', locals: { title: '上传图片' } %>

@ -15,19 +15,11 @@
<td> <td>
<%= select_tag(:tag_repertoires, options_for_select(@shixun_tags,shixun.tag_repertoires.pluck(:id)),multiple:true,class:"form-control shixun-setting-form",data:{id:shixun.id},id:"tags-chosen-#{shixun.id}") %> <%= select_tag(:tag_repertoires, options_for_select(@shixun_tags,shixun.tag_repertoires.pluck(:id)),multiple:true,class:"form-control shixun-setting-form",data:{id:shixun.id},id:"tags-chosen-#{shixun.id}") %>
</td> </td>
<td> <td class="shixun-setting-image">
<!-- 图片上传,稍后添加--> <% imageExists = File.exist?(disk_filename("Shixun",shixun.id)) %>
-- <% imageUrl = imageExists ? '/' + url_to_avatar(shixun) + "?#{Time.now.to_i}" : '' %>
<%= image_tag(imageUrl, width: 60, height: 40, class: "preview-image shixun-image-#{shixun.id}", data: { toggle: 'tooltip', title: '点击预览' }, style: imageExists ? '' : 'display:none') %>
<!-- <a href="javascript:void(0);" id="object_upload_img_<%#= shixun.id %>" onclick="$('#upload_img_<%= shixun.id %>').click();">--> <%= javascript_void_link imageExists ? '重新上传' : '上传图片', class: 'action upload-shixun-image-action', data: { source_id: shixun.id, source_type: 'Shixun', toggle: 'modal', target: '.admin-upload-file-modal' } %>
<%#= File.exist?(disk_filename("Shixun",shixun.id)) ? "重新上传" : "上传图片" %>
<!-- </a>-->
<%# if File.exist?(disk_filename("Shixun",shixun.id)) %>
<%#= image_tag(url_to_avatar(shixun), :class => "w80 h80 fl ml5 shixun_image_show", :id => "shixun_image_show_#{shixun.id}") %>
<%# else %>
<!-- <img src="" class="w80 h80 fl ml5 shixun_image_show none" id="shixun_image_show_<%#= shixun.id %>"/>-->
<%# end %>
</td> </td>
<td><%= link_to shixun.owner.try(:show_real_name),"/users/#{shixun.owner.login}",target:'_blank' %></td> <td><%= link_to shixun.owner.try(:show_real_name),"/users/#{shixun.owner.login}",target:'_blank' %></td>
<td> <td>

@ -9,7 +9,7 @@
<th width="5%">选择</th> <th width="5%">选择</th>
<th width="6%">状态</th> <th width="6%">状态</th>
<th width="7%">创建者</th> <th width="7%">创建者</th>
<th class="eud-pointer" width="13%"><%= sort_tag('创建于', name: 'created_at', path: admins_shixuns_path) %></th> <th width="13%"><%= sort_tag('创建于', name: 'created_on', path: admins_shixuns_path) %></th>
<th width="5%">单测</th> <th width="5%">单测</th>
<th width="6%">操作</th> <th width="6%">操作</th>
</thead> </thead>

@ -1,5 +1,5 @@
<nav class="navbar navbar-expand-lg navbar-dark bg-dark"> <nav class="navbar navbar-expand-lg navbar-dark bg-dark">
<a class="navbar-brand" href="#"> <a class="navbar-brand" href="/">
<img src="/images/educoder/headNavLogo.png" width="40" height="40" alt=""> <img src="/images/educoder/headNavLogo.png" width="40" height="40" alt="">
</a> </a>

@ -1,18 +0,0 @@
json.question do
json.id question.id
json.question_number question.question_number
json.question_title question.question_title
json.question_type question.question_type
json.is_necessary question.is_necessary
if question.question_type == 2
json.max_choices question.max_choices
json.min_choices question.min_choices
end
json.answers do
json.array! answers do | a|
json.answer_id a.id
json.answer_position a.choice_position
json.answer_text a.choice_text.nil? ? "other_choices" : a.choice_text ##
end
end
end

@ -28,9 +28,24 @@ else
json.q_mains @poll_question_mains json.q_mains @poll_question_mains
end end
json.questions do json.questions @exercise_questions do | question|
json.array! @exercise_questions do | question| json.question do
json.partial! "exercise_banks/poll_questions", question: question, answers: question.exercise_bank_choices json.id question.id
json.question_number question.question_number
json.question_title question.question_title
json.question_type question.question_type
json.is_necessary question.is_necessary
if question.question_type == 2
json.max_choices question.max_choices
json.min_choices question.min_choices
end
json.answers do
json.array! question.exercise_bank_choices do | a|
json.answer_id a.id
json.answer_position a.choice_position
json.answer_text a.choice_text.nil? ? "other_choices" : a.choice_text ##
end
end
end end
end end
end end

@ -1,9 +1,14 @@
json.count @count json.count @count
json.course_list @course_lists, partial: 'users/question_banks/shared/course_list', as: :course_list json.course_list @course_lists, partial: 'users/question_banks/shared/course_list', as: :course_list
json.question_banks do
json.array! @question_banks do |question_bank| json.question_banks @question_banks do |question_bank|
json.partial! 'users/question_banks/shared/question_bank', locals: { question_bank: question_bank } json.id question_bank.id
json.name question_bank.name
json.is_public question_bank.is_public
json.quotes_count question_bank.quotes
json.creator_name question_bank.user.name
json.course_list_name question_bank.course_list.name
json.updated_at question_bank.updated_at
json.solve_count @solve_count_map.fetch(question_bank.id, 0) json.solve_count @solve_count_map.fetch(question_bank.id, 0)
end
end end

@ -198,6 +198,7 @@ Rails.application.routes.draw do
post :file_content post :file_content
post :update_file post :update_file
post :close post :close
post :add_file
get :fork_list get :fork_list
post :update_propaedeutics post :update_propaedeutics
get :add_collaborators get :add_collaborators
@ -778,6 +779,7 @@ Rails.application.routes.draw do
namespace :admins do namespace :admins do
get '/', to: 'dashboards#index' get '/', to: 'dashboards#index'
resources :files, only: [:create]
resources :daily_school_statistics, only: [:index] do resources :daily_school_statistics, only: [:index] do
get :export, on: :collection get :export, on: :collection

@ -0,0 +1,10 @@
class AddAnnouncementToCourseModules < ActiveRecord::Migration[5.2]
def change
Course.all.each do |course|
unless course.course_modules.exists?(module_type: "announcement")
course.course_modules.where.not(module_type: "activity").update_all("position = position + 1")
course.course_modules << CourseModule.new(module_type: "announcement", hidden: 1, module_name: "公告栏", position: 2)
end
end
end
end

File diff suppressed because one or more lines are too long

@ -38171,6 +38171,68 @@ $(document).on('turbolinks:load', function() {
}); });
} }
}); });
$(document).on('turbolinks:load', function() {
var $modal = $('.modal.admin-upload-file-modal');
if ($modal.length > 0) {
var $form = $modal.find('form.admin-upload-file-form')
var $sourceIdInput = $modal.find('input[name="source_id"]');
var $sourceTypeInput = $modal.find('input[name="source_type"]');
$modal.on('show.bs.modal', function(event){
var $link = $(event.relatedTarget);
var sourceId = $link.data('sourceId');
var sourceType = $link.data('sourceType');
$sourceIdInput.val(sourceId);
$sourceTypeInput.val(sourceType);
$modal.find('.upload-file-input').trigger('click');
});
$modal.find('.upload-file-input').on('change', function(e){
var file = $(this)[0].files[0];
if(file){
$modal.find('.file-names').html(file.name);
$modal.find('.submit-btn').trigger('click');
}
})
var formValid = function(){
if($form.find('input[name="file"]').val() == undefined || $form.find('input[name="file"]').val().length == 0){
$form.find('.error').html('请选择文件');
return false;
}
return true;
};
$modal.on('click', '.submit-btn', function(){
$form.find('.error').html('');
if (formValid()) {
var formDataString = $form.serialize();
$.ajax({
method: 'POST',
dataType: 'json',
url: '/admins/files?' + formDataString,
data: new FormData($form[0]),
processData: false,
contentType: false,
success: function(data){
$.notify({ message: '上传成功' });
$modal.trigger('upload:success', data);
$modal.modal('hide');
},
error: function(res){
var data = res.responseJSON;
$form.find('.error').html(data.message);
}
});
}
});
}
});
$(document).on('turbolinks:load', function() { $(document).on('turbolinks:load', function() {
if ($('body.admins-professional-authentications-index-page').length > 0) { if ($('body.admins-professional-authentications-index-page').length > 0) {
var $searchFrom = $('.professional-authentication-list-form'); var $searchFrom = $('.professional-authentication-list-form');
@ -38389,6 +38451,13 @@ $(document).on('turbolinks:load', function() {
data: json data: json
}) })
}) })
$('.modal.admin-upload-file-modal').on('upload:success', function(e, data){
var $imageElement = $('.shixun-image-' + data.source_id);
$imageElement.attr('src', data.url);
$imageElement.show();
$imageElement.next().html('重新上传');
})
} }
}); });

@ -18444,27 +18444,32 @@ input.form-control {
} }
/* line 24, app/assets/stylesheets/common.scss */ /* line 24, app/assets/stylesheets/common.scss */
.input-group-prepend .input-group-text {
font-size: 14px;
}
/* line 29, app/assets/stylesheets/common.scss */
.flex-1 { .flex-1 {
-webkit-box-flex: 1; -webkit-box-flex: 1;
flex: 1; flex: 1;
} }
/* line 28, app/assets/stylesheets/common.scss */ /* line 33, app/assets/stylesheets/common.scss */
.font-12 { .font-12 {
font-size: 12px !important; font-size: 12px !important;
} }
/* line 29, app/assets/stylesheets/common.scss */ /* line 34, app/assets/stylesheets/common.scss */
.font-14 { .font-14 {
font-size: 14px !important; font-size: 14px !important;
} }
/* line 30, app/assets/stylesheets/common.scss */ /* line 35, app/assets/stylesheets/common.scss */
.font-16 { .font-16 {
font-size: 16px !important; font-size: 16px !important;
} }
/* line 31, app/assets/stylesheets/common.scss */ /* line 36, app/assets/stylesheets/common.scss */
.font-18 { .font-18 {
font-size: 18px !important; font-size: 18px !important;
} }
@ -18763,28 +18768,39 @@ input.form-control {
color: #6c757d; color: #6c757d;
} }
/* line 1, app/assets/stylesheets/admins/shixun_settings.scss */ /* line 2, app/assets/stylesheets/admins/shixun_settings.scss */
input[type="checkbox"] { .admins-shixun-settings-index-page input[type="checkbox"] {
font-size: 18px; font-size: 18px;
} }
/* line 4, app/assets/stylesheets/admins/shixun_settings.scss */ /* line 5, app/assets/stylesheets/admins/shixun_settings.scss */
.select2 input::-webkit-input-placeholder { .admins-shixun-settings-index-page .select2 input::-webkit-input-placeholder {
color: #ccc; color: #ccc;
} }
/* line 7, app/assets/stylesheets/admins/shixun_settings.scss */ /* line 8, app/assets/stylesheets/admins/shixun_settings.scss */
.select2 .select2-selection__choice { .admins-shixun-settings-index-page .select2 .select2-selection__choice {
border: 1px solid #eee !important; border: 1px solid #eee !important;
} }
/* line 10, app/assets/stylesheets/admins/shixun_settings.scss */ /* line 11, app/assets/stylesheets/admins/shixun_settings.scss */
.setting-chosen { .admins-shixun-settings-index-page .setting-chosen {
font-weight: 400; font-weight: 400;
font-size: 10px; font-size: 10px;
color: #333; color: #333;
} }
/* line 17, app/assets/stylesheets/admins/shixun_settings.scss */
.admins-shixun-settings-index-page .shixun-setting-image {
display: -webkit-box;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
flex-direction: column;
-webkit-box-align: center;
align-items: center;
}
/* line 1, app/assets/stylesheets/admins/sidebar.scss */ /* line 1, app/assets/stylesheets/admins/sidebar.scss */
#sidebar { #sidebar {
min-width: 200px; min-width: 200px;
@ -19106,36 +19122,37 @@ body {
align-items: stretch; align-items: stretch;
font-size: 14px; font-size: 14px;
background: #efefef; background: #efefef;
overflow: hidden;
} }
/* line 26, app/assets/stylesheets/admin.scss */ /* line 27, app/assets/stylesheets/admin.scss */
.simple_form .form-group .collection_radio_buttons { .simple_form .form-group .collection_radio_buttons {
margin-bottom: 0px; margin-bottom: 0px;
} }
/* line 30, app/assets/stylesheets/admin.scss */ /* line 31, app/assets/stylesheets/admin.scss */
.simple_form .form-group .form-check-inline { .simple_form .form-group .form-check-inline {
height: calc(1.5em + 0.75rem + 2px); height: calc(1.5em + 0.75rem + 2px);
} }
/* line 36, app/assets/stylesheets/admin.scss */ /* line 37, app/assets/stylesheets/admin.scss */
input.form-control { input.form-control {
font-size: 14px; font-size: 14px;
} }
/* line 40, app/assets/stylesheets/admin.scss */ /* line 41, app/assets/stylesheets/admin.scss */
.btn-default { .btn-default {
color: #666; color: #666;
background: #e1e1e1 !important; background: #e1e1e1 !important;
} }
/* line 44, app/assets/stylesheets/admin.scss */ /* line 45, app/assets/stylesheets/admin.scss */
.export-absolute { .export-absolute {
right: 20px; right: 20px;
position: absolute; position: absolute;
} }
/* line 48, app/assets/stylesheets/admin.scss */ /* line 49, app/assets/stylesheets/admin.scss */
.position-r { .position-r {
position: relative; position: relative;
} }

@ -38171,6 +38171,68 @@ $(document).on('turbolinks:load', function() {
}); });
} }
}); });
$(document).on('turbolinks:load', function() {
var $modal = $('.modal.admin-upload-file-modal');
if ($modal.length > 0) {
var $form = $modal.find('form.admin-upload-file-form')
var $sourceIdInput = $modal.find('input[name="source_id"]');
var $sourceTypeInput = $modal.find('input[name="source_type"]');
$modal.on('show.bs.modal', function(event){
var $link = $(event.relatedTarget);
var sourceId = $link.data('sourceId');
var sourceType = $link.data('sourceType');
$sourceIdInput.val(sourceId);
$sourceTypeInput.val(sourceType);
$modal.find('.upload-file-input').trigger('click');
});
$modal.find('.upload-file-input').on('change', function(e){
var file = $(this)[0].files[0];
if(file){
$modal.find('.file-names').html(file.name);
$modal.find('.submit-btn').trigger('click');
}
})
var formValid = function(){
if($form.find('input[name="file"]').val() == undefined || $form.find('input[name="file"]').val().length == 0){
$form.find('.error').html('请选择文件');
return false;
}
return true;
};
$modal.on('click', '.submit-btn', function(){
$form.find('.error').html('');
if (formValid()) {
var formDataString = $form.serialize();
$.ajax({
method: 'POST',
dataType: 'json',
url: '/admins/files?' + formDataString,
data: new FormData($form[0]),
processData: false,
contentType: false,
success: function(data){
$.notify({ message: '上传成功' });
$modal.trigger('upload:success', data);
$modal.modal('hide');
},
error: function(res){
var data = res.responseJSON;
$form.find('.error').html(data.message);
}
});
}
});
}
});
$(document).on('turbolinks:load', function() { $(document).on('turbolinks:load', function() {
if ($('body.admins-professional-authentications-index-page').length > 0) { if ($('body.admins-professional-authentications-index-page').length > 0) {
var $searchFrom = $('.professional-authentication-list-form'); var $searchFrom = $('.professional-authentication-list-form');
@ -38389,6 +38451,13 @@ $(document).on('turbolinks:load', function() {
data: json data: json
}) })
}) })
$('.modal.admin-upload-file-modal').on('upload:success', function(e, data){
var $imageElement = $('.shixun-image-' + data.source_id);
$imageElement.attr('src', data.url);
$imageElement.show();
$imageElement.next().html('重新上传');
})
} }
}); });

@ -18444,27 +18444,32 @@ input.form-control {
} }
/* line 24, app/assets/stylesheets/common.scss */ /* line 24, app/assets/stylesheets/common.scss */
.input-group-prepend .input-group-text {
font-size: 14px;
}
/* line 29, app/assets/stylesheets/common.scss */
.flex-1 { .flex-1 {
-webkit-box-flex: 1; -webkit-box-flex: 1;
flex: 1; flex: 1;
} }
/* line 28, app/assets/stylesheets/common.scss */ /* line 33, app/assets/stylesheets/common.scss */
.font-12 { .font-12 {
font-size: 12px !important; font-size: 12px !important;
} }
/* line 29, app/assets/stylesheets/common.scss */ /* line 34, app/assets/stylesheets/common.scss */
.font-14 { .font-14 {
font-size: 14px !important; font-size: 14px !important;
} }
/* line 30, app/assets/stylesheets/common.scss */ /* line 35, app/assets/stylesheets/common.scss */
.font-16 { .font-16 {
font-size: 16px !important; font-size: 16px !important;
} }
/* line 31, app/assets/stylesheets/common.scss */ /* line 36, app/assets/stylesheets/common.scss */
.font-18 { .font-18 {
font-size: 18px !important; font-size: 18px !important;
} }
@ -18763,28 +18768,39 @@ input.form-control {
color: #6c757d; color: #6c757d;
} }
/* line 1, app/assets/stylesheets/admins/shixun_settings.scss */ /* line 2, app/assets/stylesheets/admins/shixun_settings.scss */
input[type="checkbox"] { .admins-shixun-settings-index-page input[type="checkbox"] {
font-size: 18px; font-size: 18px;
} }
/* line 4, app/assets/stylesheets/admins/shixun_settings.scss */ /* line 5, app/assets/stylesheets/admins/shixun_settings.scss */
.select2 input::-webkit-input-placeholder { .admins-shixun-settings-index-page .select2 input::-webkit-input-placeholder {
color: #ccc; color: #ccc;
} }
/* line 7, app/assets/stylesheets/admins/shixun_settings.scss */ /* line 8, app/assets/stylesheets/admins/shixun_settings.scss */
.select2 .select2-selection__choice { .admins-shixun-settings-index-page .select2 .select2-selection__choice {
border: 1px solid #eee !important; border: 1px solid #eee !important;
} }
/* line 10, app/assets/stylesheets/admins/shixun_settings.scss */ /* line 11, app/assets/stylesheets/admins/shixun_settings.scss */
.setting-chosen { .admins-shixun-settings-index-page .setting-chosen {
font-weight: 400; font-weight: 400;
font-size: 10px; font-size: 10px;
color: #333; color: #333;
} }
/* line 17, app/assets/stylesheets/admins/shixun_settings.scss */
.admins-shixun-settings-index-page .shixun-setting-image {
display: -webkit-box;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
flex-direction: column;
-webkit-box-align: center;
align-items: center;
}
/* line 1, app/assets/stylesheets/admins/sidebar.scss */ /* line 1, app/assets/stylesheets/admins/sidebar.scss */
#sidebar { #sidebar {
min-width: 200px; min-width: 200px;
@ -19106,36 +19122,37 @@ body {
align-items: stretch; align-items: stretch;
font-size: 14px; font-size: 14px;
background: #efefef; background: #efefef;
overflow: hidden;
} }
/* line 26, app/assets/stylesheets/admin.scss */ /* line 27, app/assets/stylesheets/admin.scss */
.simple_form .form-group .collection_radio_buttons { .simple_form .form-group .collection_radio_buttons {
margin-bottom: 0px; margin-bottom: 0px;
} }
/* line 30, app/assets/stylesheets/admin.scss */ /* line 31, app/assets/stylesheets/admin.scss */
.simple_form .form-group .form-check-inline { .simple_form .form-group .form-check-inline {
height: calc(1.5em + 0.75rem + 2px); height: calc(1.5em + 0.75rem + 2px);
} }
/* line 36, app/assets/stylesheets/admin.scss */ /* line 37, app/assets/stylesheets/admin.scss */
input.form-control { input.form-control {
font-size: 14px; font-size: 14px;
} }
/* line 40, app/assets/stylesheets/admin.scss */ /* line 41, app/assets/stylesheets/admin.scss */
.btn-default { .btn-default {
color: #666; color: #666;
background: #e1e1e1 !important; background: #e1e1e1 !important;
} }
/* line 44, app/assets/stylesheets/admin.scss */ /* line 45, app/assets/stylesheets/admin.scss */
.export-absolute { .export-absolute {
right: 20px; right: 20px;
position: absolute; position: absolute;
} }
/* line 48, app/assets/stylesheets/admin.scss */ /* line 49, app/assets/stylesheets/admin.scss */
.position-r { .position-r {
position: relative; position: relative;
} }
@ -19425,27 +19442,38 @@ input.form-control {
.admins-shixun-authorizations-index-page .shixun-authorization-list-container span.apply-status-3 { .admins-shixun-authorizations-index-page .shixun-authorization-list-container span.apply-status-3 {
color: #6c757d; color: #6c757d;
} }
/* line 1, app/assets/stylesheets/admins/shixun_settings.scss */ /* line 2, app/assets/stylesheets/admins/shixun_settings.scss */
input[type="checkbox"] { .admins-shixun-settings-index-page input[type="checkbox"] {
font-size: 18px; font-size: 18px;
} }
/* line 4, app/assets/stylesheets/admins/shixun_settings.scss */ /* line 5, app/assets/stylesheets/admins/shixun_settings.scss */
.select2 input::-webkit-input-placeholder { .admins-shixun-settings-index-page .select2 input::-webkit-input-placeholder {
color: #ccc; color: #ccc;
} }
/* line 7, app/assets/stylesheets/admins/shixun_settings.scss */ /* line 8, app/assets/stylesheets/admins/shixun_settings.scss */
.select2 .select2-selection__choice { .admins-shixun-settings-index-page .select2 .select2-selection__choice {
border: 1px solid #eee !important; border: 1px solid #eee !important;
} }
/* line 10, app/assets/stylesheets/admins/shixun_settings.scss */ /* line 11, app/assets/stylesheets/admins/shixun_settings.scss */
.setting-chosen { .admins-shixun-settings-index-page .setting-chosen {
font-weight: 400; font-weight: 400;
font-size: 10px; font-size: 10px;
color: #333; color: #333;
} }
/* line 17, app/assets/stylesheets/admins/shixun_settings.scss */
.admins-shixun-settings-index-page .shixun-setting-image {
display: -webkit-box;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
flex-direction: column;
-webkit-box-align: center;
align-items: center;
}
/* line 1, app/assets/stylesheets/admins/sidebar.scss */ /* line 1, app/assets/stylesheets/admins/sidebar.scss */
#sidebar { #sidebar {
min-width: 200px; min-width: 200px;
@ -48622,27 +48650,32 @@ input.form-control {
} }
/* line 24, app/assets/stylesheets/common.scss */ /* line 24, app/assets/stylesheets/common.scss */
.input-group-prepend .input-group-text {
font-size: 14px;
}
/* line 29, app/assets/stylesheets/common.scss */
.flex-1 { .flex-1 {
-webkit-box-flex: 1; -webkit-box-flex: 1;
flex: 1; flex: 1;
} }
/* line 28, app/assets/stylesheets/common.scss */ /* line 33, app/assets/stylesheets/common.scss */
.font-12 { .font-12 {
font-size: 12px !important; font-size: 12px !important;
} }
/* line 29, app/assets/stylesheets/common.scss */ /* line 34, app/assets/stylesheets/common.scss */
.font-14 { .font-14 {
font-size: 14px !important; font-size: 14px !important;
} }
/* line 30, app/assets/stylesheets/common.scss */ /* line 35, app/assets/stylesheets/common.scss */
.font-16 { .font-16 {
font-size: 16px !important; font-size: 16px !important;
} }
/* line 31, app/assets/stylesheets/common.scss */ /* line 36, app/assets/stylesheets/common.scss */
.font-18 { .font-18 {
font-size: 18px !important; font-size: 18px !important;
} }
@ -49028,27 +49061,32 @@ input.form-control {
} }
/* line 24, app/assets/stylesheets/common.scss */ /* line 24, app/assets/stylesheets/common.scss */
.input-group-prepend .input-group-text {
font-size: 14px;
}
/* line 29, app/assets/stylesheets/common.scss */
.flex-1 { .flex-1 {
-webkit-box-flex: 1; -webkit-box-flex: 1;
flex: 1; flex: 1;
} }
/* line 28, app/assets/stylesheets/common.scss */ /* line 33, app/assets/stylesheets/common.scss */
.font-12 { .font-12 {
font-size: 12px !important; font-size: 12px !important;
} }
/* line 29, app/assets/stylesheets/common.scss */ /* line 34, app/assets/stylesheets/common.scss */
.font-14 { .font-14 {
font-size: 14px !important; font-size: 14px !important;
} }
/* line 30, app/assets/stylesheets/common.scss */ /* line 35, app/assets/stylesheets/common.scss */
.font-16 { .font-16 {
font-size: 16px !important; font-size: 16px !important;
} }
/* line 31, app/assets/stylesheets/common.scss */ /* line 36, app/assets/stylesheets/common.scss */
.font-18 { .font-18 {
font-size: 18px !important; font-size: 18px !important;
} }

@ -15757,27 +15757,32 @@ input.form-control {
} }
/* line 24, app/assets/stylesheets/common.scss */ /* line 24, app/assets/stylesheets/common.scss */
.input-group-prepend .input-group-text {
font-size: 14px;
}
/* line 29, app/assets/stylesheets/common.scss */
.flex-1 { .flex-1 {
-webkit-box-flex: 1; -webkit-box-flex: 1;
flex: 1; flex: 1;
} }
/* line 28, app/assets/stylesheets/common.scss */ /* line 33, app/assets/stylesheets/common.scss */
.font-12 { .font-12 {
font-size: 12px !important; font-size: 12px !important;
} }
/* line 29, app/assets/stylesheets/common.scss */ /* line 34, app/assets/stylesheets/common.scss */
.font-14 { .font-14 {
font-size: 14px !important; font-size: 14px !important;
} }
/* line 30, app/assets/stylesheets/common.scss */ /* line 35, app/assets/stylesheets/common.scss */
.font-16 { .font-16 {
font-size: 16px !important; font-size: 16px !important;
} }
/* line 31, app/assets/stylesheets/common.scss */ /* line 36, app/assets/stylesheets/common.scss */
.font-18 { .font-18 {
font-size: 18px !important; font-size: 18px !important;
} }

@ -473,27 +473,25 @@ class CoursesIndex extends Component{
} }
></Route> ></Route>
{/*毕设任务题库详情*/} {/*毕设任务题库详情*/}
<Route path="/courses/completetask/:workid" <Route path="/banks/gtopic_topics/:workid"
render={ render={
(props) => (<Completetaskpage {...this.props} {...props} {...this.state} />) (props) => (<Completetaskpage {...this.props} {...props} {...this.state} />)
} }
></Route> ></Route>
{/*毕设选题题库详情*/} {/*毕设内容题库详情*/}
<Route path="/courses/completetopic/:workid" <Route path="/banks/gtask_topics/:workid"
render={ render={
(props) => (<CompletetopicdePage {...this.props} {...props} {...this.state} />) (props) => (<CompletetopicdePage {...this.props} {...props} {...this.state} />)
} }
></Route> ></Route>
{/*GroupjobbankPage*/}
{/*分组作业题库详情*/} {/*分组作业题库详情*/}
<Route path="/courses/groupingwork/:workid" <Route path="/banks/group_topics/:workid"
render={ render={
(props) => (<GroupjobbankPage {...this.props} {...props} {...this.state} />) (props) => (<GroupjobbankPage {...this.props} {...props} {...this.state} />)
} }
></Route> ></Route>
{/*Generaljobbankdetails*/}
{/* 普通作业题库详情*/} {/* 普通作业题库详情*/}
<Route path="/courses/ordinarywork/:workid" <Route path="/banks/normal_topics/:workid"
render={ render={
(props) => (<Generaljobbankdetails {...this.props} {...props} {...this.state} />) (props) => (<Generaljobbankdetails {...this.props} {...props} {...this.state} />)
} }

@ -2152,7 +2152,7 @@ class PollNew extends Component {
arr[i].question.max_choices = length; arr[i].question.max_choices = length;
}else{ }else{
arr[i].question.min_choices = parseInt(value); arr[i].question.min_choices = parseInt(value);
arr[i].question.max_choices = length; arr[i].question.max_choices = max;
} }
}catch (e) { }catch (e) {
arr[i].question.min_choices = 2; arr[i].question.min_choices = 2;

Loading…
Cancel
Save