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

dev_sync_trustie
daiao 5 years ago
commit e29cfbda4e

@ -29,6 +29,9 @@ $(document).on('turbolinks:load', function(){
$(".nav-setting-form .enroll_end_time").datetimepicker(timeOptions); $(".nav-setting-form .enroll_end_time").datetimepicker(timeOptions);
$(".stage-update-form .section-start-time").datetimepicker(timeOptions);
$(".stage-update-form .section-end-time").datetimepicker(timeOptions);
defineDateRangeSelect('.teaching-mode-date'); defineDateRangeSelect('.teaching-mode-date');
// defineTimeRangeSelect('.competition-start-end-date'); // defineTimeRangeSelect('.competition-start-end-date');
@ -182,10 +185,8 @@ $(function () {
' <span class="mt-2">人</span>\n' + ' <span class="mt-2">人</span>\n' +
' <div class="col-2 mt-1">\n' + ' <div class="col-2 mt-1">\n' +
' <select class="form-control" name="competition_staffs[][category]">\n' + ' <select class="form-control" name="competition_staffs[][category]">\n' +
' <option value="all">不限</option>\n' +
' <option value="teacher">教师</option>\n' +
' <option value="student">学生</option>\n' + ' <option value="student">学生</option>\n' +
' <option value="profession">专业人士</option>\n' + ' <option value="teacher">教师</option>\n' +
' </select>\n' + ' </select>\n' +
' </div>\n' + ' </div>\n' +
' <div class="col-2 mt-1">\n' + ' <div class="col-2 mt-1">\n' +
@ -209,7 +210,7 @@ $(function () {
$("#requireForm").on("click",".delRequrieBtn",function () { $("#requireForm").on("click",".delRequrieBtn",function () {
$(this).parents(".requireForm_item").remove(); $(this).parents(".requireForm_item").remove();
}) });
$('.competition-staff-settings').on('click', '.mutiple-limited-radio', function(){ $('.competition-staff-settings').on('click', '.mutiple-limited-radio', function(){
var radio = $(this); var radio = $(this);
@ -248,8 +249,6 @@ $(function () {
}); });
}); });
// 排行榜设置 // 排行榜设置
//删除小阶段 //删除小阶段
$("#large_panel").on("click",".small_panel_item_del",function () { $("#large_panel").on("click",".small_panel_item_del",function () {
@ -260,7 +259,89 @@ $(function () {
console.log(i); console.log(i);
$(list).find(".subName").eq(i).html("第"+parseInt(i+1)+"阶段"); $(list).find(".subName").eq(i).html("第"+parseInt(i+1)+"阶段");
} }
}) });
$('form.stage-update-form').validate({
errorElement: 'span',
errorClass: 'danger text-danger',
rules: {
stage_name: "required",
"stage[][start_time]": "required",
"stage[][end_time]": "required",
"stage[][mission_count]": {
required: true,
min: 1
},
"stage[][entry]": {
required: true,
min: 1
},
score_rate: {
required: true,
range: [0, 100]
}
},
messages: {
"stage[][mission_count]": {
min: ">=1"
},
"stage[][entry]": {
min: ">=1"
},
}
});
$('form.stage-update-form').on('click', ".update-stage", function () {
var updateForm = $(this).parents("form");
$(this).attr('disabled', 'disabled');
updateForm.find('.error').html('');
var valid = updateForm.valid();
updateForm.find('input[name="stage[][identifiers][]"]').each(function(_, e){
var $ele = $(e);
if($ele.val() === undefined || $ele.val().length === 0){
$ele.addClass('danger text-danger');
valid = false;
} else {
$ele.removeClass('danger text-danger');
}
});
if (!valid) return;
updateForm.find('input[name="stage[][mission_count]"]').each(function(_, e){
var $missionCount = $(e);
var $entryCount = $(e).parents("div.row").find('input[name="stage[][mission_count]"]');
if(parseInt($missionCount.val()) > parseInt($entryCount.val()) ){
$missionCount.addClass('danger text-danger');
$missionCount.after('<span class="danger text-danger">不能大于总任务数</span>');
valid = false;
} else {
$missionCount.removeClass('danger text-danger');
$missionCount.siblings().remove();
}
});
$.ajax({
method: 'POST',
dataType: 'json',
url: updateForm.attr('action'),
data: new FormData(updateForm[0]),
processData: false,
contentType: false,
success: function (data) {
$.notify({message: '保存成功'});
// window.location.reload();
},
error: function (res) {
var data = res.responseJSON;
$navForm.find('.error').html(data.message);
},
complete: function () {
$navForm.find('.submit-btn').attr('disabled', false);
}
});
});
}); });
@ -374,16 +455,14 @@ function addNewTab() {
var html = '<div class="large_panel_part" attr_line="'+count+'"><div class="row d-flex mt-3">\n' + var html = '<div class="large_panel_part" attr_line="'+count+'"><div class="row d-flex mt-3">\n' +
' <span class="col-1 mt-2">tab标题</span>\n' + ' <span class="col-1 mt-2">tab标题</span>\n' +
' <div class="col-2 no_padding">\n' + ' <div class="col-2 no_padding">\n' +
' <input type="text" class="form-control" name="tab_title_1"/>\n' + ' <input type="text" class="form-control" name="stage_name"/>\n' +
' </div>\n' + ' </div>\n' +
' <span class="col-1 text-right mt-2 no_padding">总排行榜占比:</span>\n' + ' <span class="col-1 text-right mt-2 no_padding">总排行榜占比:</span>\n' +
' <div class="col-1 no_padding">\n' + ' <div class="col-1 no_padding">\n' +
' <input type="number" class="form-control" name="tab_percent_'+count+'"/>\n' + ' <input type="number" class="form-control" name="score_rate" value="100"/>\n' +
' </div><span class=" mt-2">%</span>\n' + ' </div><span class=" mt-2">%</span>\n' +
' <div class="flex-1">\n' + ' <div class="flex-1">\n' +
' <a href="javascript:void(0)"class="btn btn-outline-primary export-action ml20 add_task_sub" onclick="add_task_sub(this)">新增子阶段</a>\n' + ' <a href="javascript:void(0)"class="btn btn-outline-primary export-action ml20 add_task_sub" onclick="add_task_sub(this)">新增子阶段</a>\n' +
' <a href="javascript:void(0)" class="btn btn-outline-primary export-action ml20">发送短信提醒</a>\n' +
' <a href="javascript:void(0)" class="btn btn-outline-primary export-action ml20">计算成绩</a>\n' +
' </div>\n' + ' </div>\n' +
' <a href="javascript:void(0)" class="btn btn-default ml20" onclick="Del_tab(this)">删除</a>\n' + ' <a href="javascript:void(0)" class="btn btn-default ml20" onclick="Del_tab(this)">删除</a>\n' +
' <a href="javascript:void(0)" class="btn btn-outline-primary export-action ml20">保存</a>\n' + ' <a href="javascript:void(0)" class="btn btn-outline-primary export-action ml20">保存</a>\n' +
@ -391,4 +470,4 @@ function addNewTab() {
' <div id="small_panel_'+count+'" class="small_panel"></div></div>'; ' <div id="small_panel_'+count+'" class="small_panel"></div></div>';
$("#large_panel").append(html); $("#large_panel").append(html);
} }

@ -11,6 +11,7 @@
//= require select2 //= require select2
//= require jquery.cxselect //= require jquery.cxselect
//= require bootstrap-datepicker //= require bootstrap-datepicker
//= require bootstrap-datetimepicker
//= require bootstrap.viewer //= require bootstrap.viewer
//= require jquery.mloading //= require jquery.mloading
//= require jquery-confirm.min //= require jquery-confirm.min

@ -1,16 +1,18 @@
class Admins::CompetitionStagesController < Admins::BaseController class Admins::CompetitionStagesController < Admins::BaseController
def create def create
if @competition.competition_stages.exists?(name: params[:stage_name]) Admins::CompetitionStageUpdateService.call(current_competition, update_form_params)
render_ok
if current_competition.competition_stages.exists?(name: params[:stage_name])
render_error "已存在同名的阶段" render_error "已存在同名的阶段"
else else
@competition.competition_stages << CompetitionStage.new(name: params[:stage_name]) current_competition.competition_stages << CompetitionStage.new(name: params[:stage_name])
render_ok render_ok
end end
end end
def update def update
current_stage.update_attributes!(name: params[:stage_name], score_rate: params[:score_rate]) Admins::CompetitionStageUpdateService.call(current_competition, update_form_params, current_stage)
render_ok render_ok
end end
@ -78,6 +80,11 @@ class Admins::CompetitionStagesController < Admins::BaseController
end end
def current_stage def current_stage
@_current_stage ||= CompetitionStage.find_by!(competition_id: params[:competition_id], id: params[:stage_id]) @_current_stage ||= CompetitionStage.find_by!(competition_id: params[:competition_id], id: params[:id])
end
def update_form_params
params.permit(:stage_name, :score_rate, stage: [:start_time, :end_time, :mission_count, :entry, :score_source, identifiers: []])
end end
end end

@ -116,7 +116,8 @@ class Competitions::CompetitionTeamsController < Competitions::BaseController
keyword = params[:keyword].to_s.strip keyword = params[:keyword].to_s.strip
if keyword.present? if keyword.present?
teams = teams.joins(users: { user_extension: :school }).where('schools.name LIKE ?', "%#{keyword}%") teams = teams.joins(users: { user_extension: :school })
.where('competition_teams.name LIKE :keyword OR schools.name LIKE :keyword', keyword: "%#{keyword}%")
end end
@all_count = teams.count @all_count = teams.count

@ -7,6 +7,7 @@ class Competitions::TeachersController < Competitions::BaseController
end end
teachers = User.joins(:user_extension).where(status: 1, user_extensions: { identity: 0 }) teachers = User.joins(:user_extension).where(status: 1, user_extensions: { identity: 0 })
teachers = teachers.where(user_extensions: { school_id: current_competition.region_schools.pluck(:school_id) }) if current_competition.region_schools.size > 0
teachers = teachers.where.not(id: params[:teacher_ids]) if params[:teacher_ids].present? teachers = teachers.where.not(id: params[:teacher_ids]) if params[:teacher_ids].present?
teachers = teachers.where('LOWER(CONCAT(lastname, firstname, login, nickname)) LIKE ?', "%#{keyword}%") teachers = teachers.where('LOWER(CONCAT(lastname, firstname, login, nickname)) LIKE ?', "%#{keyword}%")
@teachers = teachers.includes(user_extension: :school).limit(10) @teachers = teachers.includes(user_extension: :school).limit(10)

@ -1,24 +0,0 @@
class Weapps::RegisterCodesController < Weapps::BaseController
before_action :require_wechat_login!
def create
login = params[:login].to_s.strip
if login =~ /^[a-zA-Z0-9]+([._\\]*[a-zA-Z0-9])*@([a-z0-9]+[-a-z0-9]*[a-z0-9]+.){1,63}[a-z0-9]+$/
user = User.find_by(mail: login)
return render_error('该邮箱已注册') if user.present?
elsif login =~ /^1\d{10}$/
user = User.find_by(phone: params[:login])
return render_error('该手机号已注册') if user.present?
else
return render_error('请输入正确的邮箱或手机号')
end
code = %W(0 1 2 3 4 5 6 7 8 9)
verification_code = code.sample(6).join
send_type = login =~ /^1\d{10}$/ ? 1 : 8
# 记录验证码
check_verification_code(verification_code, send_type, login)
render_ok
end
end

@ -0,0 +1,51 @@
class Weapps::VerificationCodesController < Weapps::BaseController
before_action :require_wechat_login!
def create
params[:type] == 'register' ? check_can_register : check_can_reset_password
end
private
def check_can_register
login = params[:login].to_s.strip
if login =~ /^[a-zA-Z0-9]+([._\\]*[a-zA-Z0-9])*@([a-z0-9]+[-a-z0-9]*[a-z0-9]+.){1,63}[a-z0-9]+$/
user = User.find_by(mail: login)
return render_error('该邮箱已注册') if user.present?
elsif login =~ /^1\d{10}$/
user = User.find_by(phone: params[:login])
return render_error('该手机号已注册') if user.present?
else
return render_error('请输入正确的邮箱或手机号')
end
code = %W(0 1 2 3 4 5 6 7 8 9)
verification_code = code.sample(6).join
send_type = login =~ /^1\d{10}$/ ? 1 : 8
# 记录验证码
check_verification_code(verification_code, send_type, login)
render_ok
end
def check_can_reset_password
login = params[:login].to_s.strip
if login =~ /^[a-zA-Z0-9]+([._\\]*[a-zA-Z0-9])*@([a-z0-9]+[-a-z0-9]*[a-z0-9]+.){1,63}[a-z0-9]+$/
user = User.find_by(mail: login)
return render_error('该邮箱尚未注册') if user.blank?
elsif login =~ /^1\d{10}$/
user = User.find_by(phone: login)
return render_error('该手机号尚未注册') if user.blank?
else
return render_error('请输入正确的邮箱或手机号')
end
code = %W(0 1 2 3 4 5 6 7 8 9)
verification_code = code.sample(6).join
send_type = login =~ /^1\d{10}$/ ? 2 : 3
# 记录验证码
check_verification_code(verification_code, send_type, login)
render_ok
end
end

@ -1,4 +1,5 @@
class CompetitionStageSection < ApplicationRecord class CompetitionStageSection < ApplicationRecord
# score_source 0: 经验值, 1预测准确率
belongs_to :competition belongs_to :competition
belongs_to :competition_stage belongs_to :competition_stage

@ -1,2 +1,3 @@
class WeappSettings::Advert < WeappSetting class WeappSettings::Advert < WeappSetting
default_scope { order(position: :asc) }
end end

@ -0,0 +1,29 @@
class Admins::CompetitionStageCreateService < ApplicationService
attr_reader :competition, :params
def initialize(competition, params)
@params = params
@competition = competition
end
def call
ActiveRecord::Base.transaction do
stage = CompetitionStage.create!(competition_id: competition.id, name: params[:stage_name], score_rate: (params[:score_rate].to_i / 100).round(2))
stage.competition_stage_sections.destroy_all
params[:stage].each do |section|
stage_section = CompetitionStageSection.create!(competition_id: competition.id, competition_stage_id: stage.id,
start_time: section["start_time"], end_time: section["end_time"],
mission_count: section["mission_count"], entry: section["entry"],
score_source: section["score_source"])
section["identifiers"].each do |identifier|
CompetitionEntry.create!(competition_stage_section_id: stage_section.id, competition_stage_id: stage.id,
shixun_identifier: identifier)
end
end
stage
end
end
end

@ -0,0 +1,30 @@
class Admins::CompetitionStageUpdateService < ApplicationService
attr_reader :competition, :params, :stage
def initialize(competition, params, stage)
@params = params
@competition = competition
@stage = stage
end
def call
ActiveRecord::Base.transaction do
stage.update_attributes!(name: params[:stage_name], score_rate: (params[:score_rate].to_i / 100).round(2))
stage.competition_stage_sections.destroy_all
params[:stage].each do |section|
stage_section = CompetitionStageSection.create!(competition_id: competition.id, competition_stage_id: stage.id,
start_time: section["start_time"], end_time: section["end_time"],
mission_count: section["mission_count"], entry: section["entry"],
score_source: section["score_source"])
section["identifiers"].each do |identifier|
CompetitionEntry.create!(competition_stage_section_id: stage_section.id, competition_stage_id: stage.id,
shixun_identifier: identifier)
end
end
stage
end
end
end

@ -9,22 +9,22 @@ class Admins::DragWeappAdvertService < ApplicationService
def call def call
return if move.position + 1 == after&.position # 未移动 return if move.position + 1 == after&.position # 未移动
carousels = WeappSettings::Advert.all adverts = WeappSettings::Advert.all
ActiveRecord::Base.transaction do ActiveRecord::Base.transaction do
if after.blank? || move.id == after.id # 移动至末尾 if after.blank? || move.id == after.id # 移动至末尾
total = carousels.count total = adverts.count
carousels.where('position > ?', move.position).update_all('position = position - 1') adverts.where('position > ?', move.position).update_all('position = position - 1')
move.update!(position: total) move.update!(position: total)
return return
end end
if move.position > after.position # 前移 if move.position > after.position # 前移
carousels.where('position >= ? AND position < ?', after.position, move.position).update_all('position = position + 1') adverts.where('position >= ? AND position < ?', after.position, move.position).update_all('position = position + 1')
move.update!(position: after.position) move.update!(position: after.position)
else # 后移 else # 后移
carousels.where('position > ? AND position < ?', move.position, after.position).update_all('position = position - 1') adverts.where('position > ? AND position < ?', move.position, after.position).update_all('position = position - 1')
move.update!(position: after.position - 1) move.update!(position: after.position - 1)
end end
end end

@ -11,7 +11,7 @@ class Competitions::CreatePersonalTeamService < ApplicationService
def call def call
raise Error, '个人赛才能报名' unless competition.personal? raise Error, '个人赛才能报名' unless competition.personal?
raise Error, '本竞赛只对指定单位/学校开放' unless competition.open?(user) raise Error, '本竞赛只面向部分学校/单位开放,你暂时没有参赛资格' unless competition.open?(user)
is_teacher = user.is_teacher? is_teacher = user.is_teacher?
raise Error, '本竞赛的参赛者限定为:学生' if is_teacher && competition.teacher_enroll_forbidden? raise Error, '本竞赛的参赛者限定为:学生' if is_teacher && competition.teacher_enroll_forbidden?

@ -13,7 +13,7 @@ class Competitions::JoinTeamService < ApplicationService
invite_code = params[:invite_code].to_s.strip invite_code = params[:invite_code].to_s.strip
raise Error, '战队邀请码不能为空' if invite_code.blank? raise Error, '战队邀请码不能为空' if invite_code.blank?
raise Error, '本竞赛只对指定单位/学校开放' unless competition.open?(user) raise Error, '本竞赛只面向部分学校/单位开放,你暂时没有参赛资格' unless competition.open?(user)
is_teacher = user.is_teacher? is_teacher = user.is_teacher?
raise Error, '本竞赛的参赛者限定为:学生' if is_teacher && competition.teacher_enroll_forbidden? raise Error, '本竞赛的参赛者限定为:学生' if is_teacher && competition.teacher_enroll_forbidden?

@ -238,10 +238,8 @@
<span class="mt-2">人</span> <span class="mt-2">人</span>
<div class="col-2 mt-1"> <div class="col-2 mt-1">
<select class="form-control" name="competition_staffs[][category]"> <select class="form-control" name="competition_staffs[][category]">
<option value="all" <%= staff.category == "all" ? "selected='selected'" : "" %>>不限</option>
<option value="teacher" <%= staff.category == "teacher" ? "selected='selected'" : "" %>>教师</option>
<option value="student" <%= staff.category == "student" ? "selected='selected'" : "" %>>学生</option> <option value="student" <%= staff.category == "student" ? "selected='selected'" : "" %>>学生</option>
<option value="profession" <%= staff.category == "profession" ? "selected='selected'" : "" %>>专业人士</option> <option value="teacher" <%= staff.category == "teacher" ? "selected='selected'" : "" %>>教师</option>
</select> </select>
</div> </div>
<div class="col-2 mt-1"> <div class="col-2 mt-1">
@ -341,10 +339,10 @@
</div> </div>
<div class="card-body"> <div class="card-body">
<div id="large_panel" class="large_panel"> <div id="large_panel" class="large_panel competition-chart-setting">
<% if @competition.competition_stages.count > 0 %> <% if @competition.competition_stages.count > 0 %>
<% @competition.competition_stages.each_with_index do |stage, index| %> <% @competition.competition_stages.includes(competition_stage_sections: :competition_entries).each_with_index do |stage, index| %>
<%= form_tag(admins_competition_competition_stage_path(competition_id: @competition.id, id: stage.id), method: :put, class: 'stage_update_form flex-1', remote: true) do %> <%= form_tag(admins_competition_competition_stage_path(competition_id: @competition.id, id: stage.id), method: :put, class: 'stage-update-form flex-1', remote: true) do %>
<div class="large_panel_part" attr_line="1"> <div class="large_panel_part" attr_line="1">
<div class="row d-flex"> <div class="row d-flex">
<span class="col-1 mt-2">tab标题</span> <span class="col-1 mt-2">tab标题</span>
@ -361,41 +359,50 @@
<a href="javascript:void(0)" class="btn btn-outline-primary export-action ml20">计算成绩</a> <a href="javascript:void(0)" class="btn btn-outline-primary export-action ml20">计算成绩</a>
</div> </div>
<a href="javascript:void(0)" class="btn btn-default ml20" onclick="Del_tab(this)">删除</a> <a href="javascript:void(0)" class="btn btn-default ml20" onclick="Del_tab(this)">删除</a>
<a href="javascript:void(0)" class="btn btn-outline-primary export-action ml20">保存</a> <a href="javascript:void(0)" class="btn btn-outline-primary export-action update-stage ml20">保存</a>
</div> </div>
<div id="small_panel_<%= index + 1 %>" class="small_panel"> <div id="small_panel_<%= index + 1 %>" class="small_panel">
<% stage.competition_stage_sections.each_with_index do |section, j| %> <% stage.competition_stage_sections.each_with_index do |section, j| %>
<div class="row d-flex small_panel_item" attr_line="sub_1_1" count="<%= j + 1 %>"> <div class="row d-flex small_panel_item" attr_line="sub_<%= index %>_<%= j %>" count="<%= j + 1 %>">
<span class="col-1 mt-2 subName">第<%= j + 1 %>阶段</span> <span class="col-1 mt-2 subName">第<%= j + 1 %>阶段</span>
<div class="flex-1"> <div class="flex-1">
<div class="row"> <div class="row">
<span class="mt-2 ml20">有效时间:</span> <span class="mt-2 ml20">有效时间:</span>
<div class="col-2 no_padding input_middle"> <div class="col-2 no_padding input_middle">
<%= 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[][start_time]', section.start_time&.strftime('%Y-%m-%d %H:%M'), autocomplete: 'off', class: 'section-start-time form-control', placeholder: '有效开始时间' %>
</div> </div>
<span class="mt-2">~</span> <span class="mt-2">~</span>
<div class="col-2 no_padding input_middle"> <div class="col-2 no_padding input_middle">
<%= text_field_tag 'stage[][end_time]', section.end_time&.strftime('%Y-%m-%d %H:%M'), autocomplete: 'off', class: 'section_end_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: '有效结束时间' %>
</div> </div>
<span class="col-2 text-right mt-2 no_padding">任务完成要求:</span> <span class="col-2 text-right mt-2 no_padding">任务完成要求:</span>
<div class="col-1 no_padding input_small"> <div class="col-1 no_padding input_small">
<input type="number" class="form-control" name="stage[][end_time]"/> <input type="number" class="form-control" value="<%= section.mission_count %>" name="stage[][mission_count]"/>
</div> </div>
<span class="mt-2 ml10 mr10">/</span> <span class="mt-2 ml10 mr10">/</span>
<div class="col-1 no_padding input_small"> <div class="col-1 no_padding input_small">
<input type="number" class="form-control task_all" onchange="change_total(this)" name="task_require_all_1_1"/> <input type="number" class="form-control task_all" value="<%= section.entry %>" onchange="change_total(this)" name="stage[][entry]"/>
</div> </div>
<span class=" mt-2">(总任务)</span> <span class=" mt-2">(总任务)</span>
<span class="col-1 text-right mt-2 no_padding">成绩来源:</span> <span class="col-1 text-right mt-2 no_padding">成绩来源:</span>
<div class="col-2 no_padding input_middle"> <div class="col-2 no_padding input_middle">
<select class="form-control" name="source_1_1"> <select class="form-control" name="stage[][score_source]">
<option>经验值</option> <option value="0" <%= section.score_source == 0 ? "selected='selected'" : "" %>>经验值</option>
<option>预测准确率</option> <option value="1" <%= section.score_source == 1 ? "selected='selected'" : "" %>>预测准确率</option>
</select> </select>
</div> </div>
</div> </div>
<div class="row mt-2" id="task_Input_sub_1_1"></div> <div class="row mt-2" id="task_Input_sub_<%= index %>_<%= j %>">
<% section.competition_entries.each_with_index do |entry, z| %>
<div class="col-4 row task_Input_div">
<span class="col-3 text-center mt-3">任务<%= z+1 %></span>
<div class="col-8">
<input type="text" class="form-control mt-2" value="<%= entry.shixun_identifier %>" name="stage[][identifiers][]" placeholder="请填写实训ID">
</div>
</div>
<% end %>
</div>
</div> </div>
<span> <span>
<a href="javascript:void(0)" class="btn btn-default ml20 small_panel_item_del">删除</a> <a href="javascript:void(0)" class="btn btn-default ml20 small_panel_item_del">删除</a>
@ -403,72 +410,74 @@
</div> </div>
<% end %> <% end %>
</div> </div>
<div class="error my-2 danger text-danger"></div>
</div> </div>
<% end %> <% end %>
<% end %> <% end %>
<% else %> <% else %>
<%= form_tag(admins_competition_competition_stages_path(competition_id: @competition.id), method: :post, class: 'stage-update-form new-stage-form flex-1', remote: true) do %>
<div class="large_panel_part" attr_line="1">
<div class="row d-flex">
<span class="col-1 mt-2">tab标题</span>
<div class="col-2 no_padding">
<input type="text" class="form-control" name="stage_name"/>
</div>
<span class="col-1 text-right mt-2 no_padding">总排行榜占比:</span>
<div class="col-1 no_padding">
<input type="number" class="form-control" name="score_rate" value="100"/>
</div><span class=" mt-2">%</span>
<div class="flex-1">
<a href="javascript:void(0)"class="btn btn-outline-primary export-action ml20 add_task_sub" onclick="add_task_sub(this)">新增子阶段</a>
</div>
<a href="javascript:void(0)" class="btn btn-default ml20" onclick="Del_tab(this)">删除</a>
<a href="javascript:void(0)" class="btn btn-outline-primary export-action ml20">保存</a>
</div>
<div id="small_panel_1" class="small_panel">
<div class="row d-flex small_panel_item" attr_line="sub_new_new" count="1">
<span class="col-1 mt-2 subName">第1阶段</span>
<div class="flex-1">
<div class="row">
<span class="mt-2 ml20">有效时间:</span>
<div class="col-2 no_padding input_middle">
<%= text_field_tag 'stage[][start_time]', '', autocomplete: 'off', class: 'section-start-time form-control', placeholder: '有效开始时间' %>
</div>
<span class="mt-2">~</span>
<div class="col-2 no_padding input_middle">
<%= text_field_tag 'stage[][end_time]', '', autocomplete: 'off', class: 'section-end-time form-control', placeholder: '有效结束时间' %>
</div>
<span class="col-2 text-right mt-2 no_padding">任务完成要求:</span>
<div class="col-1 no_padding input_small">
<input type="number" class="form-control" name="stage[][mission_count]" value="1"/>
</div>
<span class="mt-2 ml10 mr10">/</span>
<div class="col-1 no_padding input_small">
<input type="number" class="form-control task_all" onchange="change_total(this)" value="3" name="stage[][entry]"/>
</div>
<span class=" mt-2">(总任务)</span>
<span class="col-1 text-right mt-2 no_padding">成绩来源:</span>
<div class="col-2 no_padding input_middle">
<select class="form-control" name="stage[][score_source]">
<option value="0">经验值</option>
<option value="1">预测准确率</option>
</select>
</div>
</div>
<div class="row mt-2" id="task_Input_sub_new_new"></div>
</div>
<span>
<a href="javascript:void(0)" class="btn btn-default ml20 small_panel_item_del">删除</a>
</span>
</div>
</div>
</div>
<% end %>
<% end %> <% end %>
</div> </div>
</div> </div>
<div class="card-body"> <div class="card-body">
<div id="large_panel" class="large_panel"> <div id="large_panel" class="large_panel">
<div class="large_panel_part" attr_line="1">
<div class="row d-flex">
<span class="col-1 mt-2">tab标题</span>
<div class="col-2 no_padding">
<input type="text" class="form-control" name="tab_title_1"/>
</div>
<span class="col-1 text-right mt-2 no_padding">总排行榜占比:</span>
<div class="col-1 no_padding">
<input type="number" class="form-control" name="tab_percent_1"/>
</div><span class=" mt-2">%</span>
<div class="flex-1">
<a href="javascript:void(0)"class="btn btn-outline-primary export-action ml20 add_task_sub" onclick="add_task_sub(this)">新增子阶段</a>
<a href="javascript:void(0)" class="btn btn-outline-primary export-action ml20">发送短信提醒</a>
<a href="javascript:void(0)" class="btn btn-outline-primary export-action ml20">计算成绩</a>
</div>
<a href="javascript:void(0)" class="btn btn-default ml20" onclick="Del_tab(this)">删除</a>
<a href="javascript:void(0)" class="btn btn-outline-primary export-action ml20">保存</a>
</div>
<div id="small_panel_1" class="small_panel">
<div class="row d-flex small_panel_item" attr_line="sub_1_1" count="1">
<span class="col-1 mt-2 subName">第1阶段</span>
<div class="flex-1">
<div class="row">
<span class="mt-2 ml20">有效时间:</span>
<div class="col-2 no_padding input_middle">
<input class="use_time_begin_1_1 form-control" placeholder="有效开始时间"/>
</div>
<span class="mt-2">~</span>
<div class="col-2 no_padding input_middle">
<input class="use_time_end_1_1 form-control" placeholder="有效结束时间"/>
</div>
<span class="col-2 text-right mt-2 no_padding">任务完成要求:</span>
<div class="col-1 no_padding input_small">
<input type="number" class="form-control" name="task_require_small_1_1"/>
</div>
<span class="mt-2 ml10 mr10">/</span>
<div class="col-1 no_padding input_small">
<input type="number" class="form-control task_all" onchange="change_total(this)" name="task_require_all_1_1"/>
</div>
<span class=" mt-2">(总任务)</span>
<span class="col-1 text-right mt-2 no_padding">成绩来源:</span>
<div class="col-2 no_padding input_middle">
<select class="form-control" name="source_1_1">
<option>经验值</option>
<option>预测准确率</option>
</select>
</div>
</div>
<div class="row mt-2" id="task_Input_sub_1_1"></div>
</div>
<span>
<a href="javascript:void(0)" class="btn btn-default ml20 small_panel_item_del">删除</a>
</span>
</div>
</div>
</div>
</div> </div>
</div> </div>
</div> </div>

@ -5,11 +5,12 @@
<th width="16%">邮件地址</th> <th width="16%">邮件地址</th>
<th width="10%">手机号码</th> <th width="10%">手机号码</th>
<th width="14%">单位</th> <th width="14%">单位</th>
<th width="8%">角色</th>
<th width="10%"><%= sort_tag('创建于', name: 'created_on', path: admins_users_path) %></th> <th width="10%"><%= sort_tag('创建于', name: 'created_on', path: admins_users_path) %></th>
<th width="10%"><%= sort_tag('最后登录', name: 'last_login_on', path: admins_users_path) %></th> <th width="10%"><%= sort_tag('最后登录', name: 'last_login_on', path: admins_users_path) %></th>
<th width="6%"><%= sort_tag('经验值', name: 'experience', path: admins_users_path) %></th> <th width="6%"><%= sort_tag('经验值', name: 'experience', path: admins_users_path) %></th>
<th width="6%"><%= sort_tag('金币', name: 'grade', path: admins_users_path) %></th> <th width="6%"><%= sort_tag('金币', name: 'grade', path: admins_users_path) %></th>
<th width="20%">操作</th> <th width="12%">操作</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@ -24,6 +25,7 @@
<td><%= overflow_hidden_span display_text(user.mail), width: 150 %></td> <td><%= overflow_hidden_span display_text(user.mail), width: 150 %></td>
<td><%= overflow_hidden_span display_text(user.phone), width: 100 %></td> <td><%= overflow_hidden_span display_text(user.phone), width: 100 %></td>
<td><%= overflow_hidden_span display_text(user.school_name), width: 150 %></td> <td><%= overflow_hidden_span display_text(user.school_name), width: 150 %></td>
<td><%= user.identity %></td>
<td><%= display_text(user.created_on&.strftime('%Y-%m-%d %H:%M')) %></td> <td><%= display_text(user.created_on&.strftime('%Y-%m-%d %H:%M')) %></td>
<td><%= display_text(user.last_login_on&.strftime('%Y-%m-%d %H:%M')) %></td> <td><%= display_text(user.last_login_on&.strftime('%Y-%m-%d %H:%M')) %></td>
<td><%= user.experience.to_i %></td> <td><%= user.experience.to_i %></td>

@ -852,7 +852,7 @@ Rails.application.routes.draw do
resource :home, only: [:show] resource :home, only: [:show]
resource :session, only: [:create] resource :session, only: [:create]
resource :register, only: [:create] resource :register, only: [:create]
resource :register_code, only: [:create] resource :verification_code, only: [:create]
resource :code_session, only: [:create] resource :code_session, only: [:create]
resource :verify, only: [:create] resource :verify, only: [:create]
resource :check_account, only: [:create] resource :check_account, only: [:create]

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -25131,118 +25131,145 @@ input.form-control {
flex: 1; flex: 1;
} }
/* line 32, app/assets/stylesheets/common.scss */
.fl {
float: left;
}
/* line 33, app/assets/stylesheets/common.scss */ /* line 33, app/assets/stylesheets/common.scss */
.no_padding {
padding: 0px !important;
}
/* line 34, app/assets/stylesheets/common.scss */
.font-12 { .font-12 {
font-size: 12px !important; font-size: 12px !important;
} }
/* line 34, app/assets/stylesheets/common.scss */ /* line 35, app/assets/stylesheets/common.scss */
.font-14 { .font-14 {
font-size: 14px !important; font-size: 14px !important;
} }
/* line 35, app/assets/stylesheets/common.scss */ /* line 36, app/assets/stylesheets/common.scss */
.font-16 { .font-16 {
font-size: 16px !important; font-size: 16px !important;
} }
/* line 36, app/assets/stylesheets/common.scss */ /* line 37, app/assets/stylesheets/common.scss */
.font-18 { .font-18 {
font-size: 18px !important; font-size: 18px !important;
} }
/* line 37, app/assets/stylesheets/common.scss */ /* line 38, app/assets/stylesheets/common.scss */
.font-20 { .font-20 {
font-size: 20px !important; font-size: 20px !important;
} }
/* line 38, app/assets/stylesheets/common.scss */ /* line 39, app/assets/stylesheets/common.scss */
.font-24 { .font-24 {
font-size: 24px !important; font-size: 24px !important;
} }
/* line 39, app/assets/stylesheets/common.scss */ /* line 40, app/assets/stylesheets/common.scss */
.padding10-5 { .padding10-5 {
padding: 10px 5px; padding: 10px 5px;
} }
/* line 40, app/assets/stylesheets/common.scss */ /* line 41, app/assets/stylesheets/common.scss */
.width100 { .width100 {
width: 100%; width: 100%;
} }
/* line 41, app/assets/stylesheets/common.scss */ /* line 42, app/assets/stylesheets/common.scss */
.mb10 { .mb10 {
margin-bottom: 10px; margin-bottom: 10px;
} }
/* line 42, app/assets/stylesheets/common.scss */ /* line 43, app/assets/stylesheets/common.scss */
.mt10 { .mt10 {
margin-top: 10px; margin-top: 10px;
} }
/* line 43, app/assets/stylesheets/common.scss */ /* line 44, app/assets/stylesheets/common.scss */
.mr10 { .mr10 {
margin-right: 10px; margin-right: 10px;
} }
/* line 44, app/assets/stylesheets/common.scss */ /* line 45, app/assets/stylesheets/common.scss */
.ml10 { .ml10 {
margin-left: 10px; margin-left: 10px;
} }
/* line 44, app/assets/stylesheets/common.scss */ /* line 45, app/assets/stylesheets/common.scss */
.ml20 { .ml20 {
margin-left: 20px; margin-left: 20px;
} }
/* line 45, app/assets/stylesheets/common.scss */ /* line 46, app/assets/stylesheets/common.scss */
.textarea-width-100 { .textarea-width-100 {
width: 100%; width: 100%;
resize: none; resize: none;
border: 1px solid #ccc; border: 1px solid #ccc;
} }
/* line 46, app/assets/stylesheets/common.scss */ /* line 47, app/assets/stylesheets/common.scss */
.padding10 { .padding10 {
padding: 10px; padding: 10px;
} }
/* line 47, app/assets/stylesheets/common.scss */ /* line 48, app/assets/stylesheets/common.scss */
.padding5-10 { .padding5-10 {
padding: 5px 10px; padding: 5px 10px;
} }
/* line 48, app/assets/stylesheets/common.scss */ /* line 49, app/assets/stylesheets/common.scss */
.position-r { .position-r {
position: relative; position: relative;
} }
/* line 49, app/assets/stylesheets/common.scss */ /* line 50, app/assets/stylesheets/common.scss */
.color-grey-c { .color-grey-c {
color: #ccc; color: #ccc;
} }
/* line 50, app/assets/stylesheets/common.scss */ /* line 51, app/assets/stylesheets/common.scss */
.color-blue { .color-blue {
color: #4CACFF; color: #4CACFF;
} }
/* line 51, app/assets/stylesheets/common.scss */ /* line 52, app/assets/stylesheets/common.scss */
.color-orange {
color: #ff6800;
}
/* line 53, app/assets/stylesheets/common.scss */
.inline-block { .inline-block {
display: inline-block; display: inline-block;
} }
/* line 52, app/assets/stylesheets/common.scss */ /* line 54, app/assets/stylesheets/common.scss */
.hide { .hide {
display: none; display: none;
} }
/* line 53, app/assets/stylesheets/common.scss */ /* line 55, app/assets/stylesheets/common.scss */
.show { .show {
display: block; display: block;
} }
/* line 57, app/assets/stylesheets/common.scss */
.input_small {
-webkit-box-flex: 0 !important;
flex: 0 0 6% !important;
}
/* line 58, app/assets/stylesheets/common.scss */
.input_middle {
-webkit-box-flex: 0 !important;
flex: 0 0 13% !important;
}
/* line 2, app/assets/stylesheets/admins/auth_schools.scss */ /* line 2, app/assets/stylesheets/admins/auth_schools.scss */
.admins-auth-schools-index-page .list-item-title { .admins-auth-schools-index-page .list-item-title {
padding-bottom: 5px; padding-bottom: 5px;
@ -25590,7 +25617,68 @@ input.form-control {
/* line 38, app/assets/stylesheets/admins/competition_settings.scss */ /* line 38, app/assets/stylesheets/admins/competition_settings.scss */
.admins-competition-settings-index-page .setBtn_s { .admins-competition-settings-index-page .setBtn_s {
height: 35px; height: 35px;
line-height: 5px; line-height: 20px;
}
/* line 43, app/assets/stylesheets/admins/competition_settings.scss */
.admins-competition-settings-index-page .sponsor_label {
border: 1px solid #4CACFF;
border-radius: 5px;
background-color: rgba(76, 172, 255, 0.3);
color: #333;
padding: 0px 4px;
height: 30px;
line-height: 30px;
float: left;
margin: 4px 5px;
}
/* line 54, app/assets/stylesheets/admins/competition_settings.scss */
.admins-competition-settings-index-page .sponsor_label span {
display: block;
float: left;
height: 28px;
line-height: 28px;
margin-right: 5px;
}
/* line 62, app/assets/stylesheets/admins/competition_settings.scss */
.admins-competition-settings-index-page .sponsor_label a {
font-size: 18px;
float: left;
height: 28px;
line-height: 28px;
}
/* line 70, app/assets/stylesheets/admins/competition_settings.scss */
.admins-competition-settings-index-page .large_panel {
padding: 0px 15px;
}
/* line 73, app/assets/stylesheets/admins/competition_settings.scss */
.admins-competition-settings-index-page .large_panel .large_panel_part {
border-top: 1px solid #eaeaea;
}
/* line 76, app/assets/stylesheets/admins/competition_settings.scss */
.admins-competition-settings-index-page .large_panel .large_panel_part:first-child {
border: none;
}
/* line 80, app/assets/stylesheets/admins/competition_settings.scss */
.admins-competition-settings-index-page .large_panel .large_panel_part > .row, .admins-competition-settings-index-page .large_panel .small_panel > .row {
border-bottom: 1px solid #eaeaea;
padding: 20px 0px;
}
/* line 84, app/assets/stylesheets/admins/competition_settings.scss */
.admins-competition-settings-index-page .large_panel .small_panel {
margin-left: 20px;
}
/* line 87, app/assets/stylesheets/admins/competition_settings.scss */
.admins-competition-settings-index-page .large_panel .row:last-child {
border: none;
} }
/* line 4, app/assets/stylesheets/admins/cooperatives.scss */ /* line 4, app/assets/stylesheets/admins/cooperatives.scss */

@ -136155,6 +136155,19 @@ $(document).on('turbolinks:load', function(){
} }
}); });
//添加主办方或者开放范围
function addSponsor(item){
var html='<div class="sponsor_label">\n' +
' <input type="hidden" value="school_id" />\n' +
' <span>caicai</span>\n' +
' <a href="javascript:void(0)" onclick="del_sponsor(this)">×</a>\n' +
' </div>';
$(item).parents(".sponsorPanel").append(html);
}
//删除
function del_sponsor(item){
$(item).parents(".sponsor_label").remove();
}
$(function () { $(function () {
//MD编辑 //MD编辑
@ -136297,7 +136310,8 @@ $(function () {
} }
}) })
}) });
//新增子阶段 //新增子阶段
function add_task_sub(item){ function add_task_sub(item){
var index = $(item).parents(".large_panel_part").attr("attr_line"); var index = $(item).parents(".large_panel_part").attr("attr_line");
@ -136403,7 +136417,7 @@ function Del_tab(item) {
$(item).parents(".large_panel_part").remove(); $(item).parents(".large_panel_part").remove();
} }
//新增tab //新增tab
function addNewTab() { function addNewTab() {
var count = parseInt($("#large_panel").find(".large_panel_part").length)+1; var count = parseInt($("#large_panel").find(".large_panel_part").length)+1;
var html = '<div class="large_panel_part" attr_line="'+count+'"><div class="row d-flex mt-3">\n' + var html = '<div class="large_panel_part" attr_line="'+count+'"><div class="row d-flex mt-3">\n' +
' <span class="col-1 mt-2">tab标题</span>\n' + ' <span class="col-1 mt-2">tab标题</span>\n' +

@ -15767,118 +15767,145 @@ input.form-control {
flex: 1; flex: 1;
} }
/* line 32, app/assets/stylesheets/common.scss */
.fl {
float: left;
}
/* line 33, app/assets/stylesheets/common.scss */ /* line 33, app/assets/stylesheets/common.scss */
.no_padding {
padding: 0px !important;
}
/* line 34, app/assets/stylesheets/common.scss */
.font-12 { .font-12 {
font-size: 12px !important; font-size: 12px !important;
} }
/* line 34, app/assets/stylesheets/common.scss */ /* line 35, app/assets/stylesheets/common.scss */
.font-14 { .font-14 {
font-size: 14px !important; font-size: 14px !important;
} }
/* line 35, app/assets/stylesheets/common.scss */ /* line 36, app/assets/stylesheets/common.scss */
.font-16 { .font-16 {
font-size: 16px !important; font-size: 16px !important;
} }
/* line 36, app/assets/stylesheets/common.scss */ /* line 37, app/assets/stylesheets/common.scss */
.font-18 { .font-18 {
font-size: 18px !important; font-size: 18px !important;
} }
/* line 37, app/assets/stylesheets/common.scss */ /* line 38, app/assets/stylesheets/common.scss */
.font-20 { .font-20 {
font-size: 20px !important; font-size: 20px !important;
} }
/* line 38, app/assets/stylesheets/common.scss */ /* line 39, app/assets/stylesheets/common.scss */
.font-24 { .font-24 {
font-size: 24px !important; font-size: 24px !important;
} }
/* line 39, app/assets/stylesheets/common.scss */ /* line 40, app/assets/stylesheets/common.scss */
.padding10-5 { .padding10-5 {
padding: 10px 5px; padding: 10px 5px;
} }
/* line 40, app/assets/stylesheets/common.scss */ /* line 41, app/assets/stylesheets/common.scss */
.width100 { .width100 {
width: 100%; width: 100%;
} }
/* line 41, app/assets/stylesheets/common.scss */ /* line 42, app/assets/stylesheets/common.scss */
.mb10 { .mb10 {
margin-bottom: 10px; margin-bottom: 10px;
} }
/* line 42, app/assets/stylesheets/common.scss */ /* line 43, app/assets/stylesheets/common.scss */
.mt10 { .mt10 {
margin-top: 10px; margin-top: 10px;
} }
/* line 43, app/assets/stylesheets/common.scss */ /* line 44, app/assets/stylesheets/common.scss */
.mr10 { .mr10 {
margin-right: 10px; margin-right: 10px;
} }
/* line 44, app/assets/stylesheets/common.scss */ /* line 45, app/assets/stylesheets/common.scss */
.ml10 { .ml10 {
margin-left: 10px; margin-left: 10px;
} }
/* line 44, app/assets/stylesheets/common.scss */ /* line 45, app/assets/stylesheets/common.scss */
.ml20 { .ml20 {
margin-left: 20px; margin-left: 20px;
} }
/* line 45, app/assets/stylesheets/common.scss */ /* line 46, app/assets/stylesheets/common.scss */
.textarea-width-100 { .textarea-width-100 {
width: 100%; width: 100%;
resize: none; resize: none;
border: 1px solid #ccc; border: 1px solid #ccc;
} }
/* line 46, app/assets/stylesheets/common.scss */ /* line 47, app/assets/stylesheets/common.scss */
.padding10 { .padding10 {
padding: 10px; padding: 10px;
} }
/* line 47, app/assets/stylesheets/common.scss */ /* line 48, app/assets/stylesheets/common.scss */
.padding5-10 { .padding5-10 {
padding: 5px 10px; padding: 5px 10px;
} }
/* line 48, app/assets/stylesheets/common.scss */ /* line 49, app/assets/stylesheets/common.scss */
.position-r { .position-r {
position: relative; position: relative;
} }
/* line 49, app/assets/stylesheets/common.scss */ /* line 50, app/assets/stylesheets/common.scss */
.color-grey-c { .color-grey-c {
color: #ccc; color: #ccc;
} }
/* line 50, app/assets/stylesheets/common.scss */ /* line 51, app/assets/stylesheets/common.scss */
.color-blue { .color-blue {
color: #4CACFF; color: #4CACFF;
} }
/* line 51, app/assets/stylesheets/common.scss */ /* line 52, app/assets/stylesheets/common.scss */
.color-orange {
color: #ff6800;
}
/* line 53, app/assets/stylesheets/common.scss */
.inline-block { .inline-block {
display: inline-block; display: inline-block;
} }
/* line 52, app/assets/stylesheets/common.scss */ /* line 54, app/assets/stylesheets/common.scss */
.hide { .hide {
display: none; display: none;
} }
/* line 53, app/assets/stylesheets/common.scss */ /* line 55, app/assets/stylesheets/common.scss */
.show { .show {
display: block; display: block;
} }
/* line 57, app/assets/stylesheets/common.scss */
.input_small {
-webkit-box-flex: 0 !important;
flex: 0 0 6% !important;
}
/* line 58, app/assets/stylesheets/common.scss */
.input_middle {
-webkit-box-flex: 0 !important;
flex: 0 0 13% !important;
}
/* line 3, app/assets/stylesheets/colleges/statistic.scss */ /* line 3, app/assets/stylesheets/colleges/statistic.scss */
.colleges-statistics-page .college-body-container .statistic-header { .colleges-statistics-page .college-body-container .statistic-header {
width: 100%; width: 100%;

@ -24775,118 +24775,145 @@ input.form-control {
flex: 1; flex: 1;
} }
/* line 32, app/assets/stylesheets/common.scss */
.fl {
float: left;
}
/* line 33, app/assets/stylesheets/common.scss */ /* line 33, app/assets/stylesheets/common.scss */
.no_padding {
padding: 0px !important;
}
/* line 34, app/assets/stylesheets/common.scss */
.font-12 { .font-12 {
font-size: 12px !important; font-size: 12px !important;
} }
/* line 34, app/assets/stylesheets/common.scss */ /* line 35, app/assets/stylesheets/common.scss */
.font-14 { .font-14 {
font-size: 14px !important; font-size: 14px !important;
} }
/* line 35, app/assets/stylesheets/common.scss */ /* line 36, app/assets/stylesheets/common.scss */
.font-16 { .font-16 {
font-size: 16px !important; font-size: 16px !important;
} }
/* line 36, app/assets/stylesheets/common.scss */ /* line 37, app/assets/stylesheets/common.scss */
.font-18 { .font-18 {
font-size: 18px !important; font-size: 18px !important;
} }
/* line 37, app/assets/stylesheets/common.scss */ /* line 38, app/assets/stylesheets/common.scss */
.font-20 { .font-20 {
font-size: 20px !important; font-size: 20px !important;
} }
/* line 38, app/assets/stylesheets/common.scss */ /* line 39, app/assets/stylesheets/common.scss */
.font-24 { .font-24 {
font-size: 24px !important; font-size: 24px !important;
} }
/* line 39, app/assets/stylesheets/common.scss */ /* line 40, app/assets/stylesheets/common.scss */
.padding10-5 { .padding10-5 {
padding: 10px 5px; padding: 10px 5px;
} }
/* line 40, app/assets/stylesheets/common.scss */ /* line 41, app/assets/stylesheets/common.scss */
.width100 { .width100 {
width: 100%; width: 100%;
} }
/* line 41, app/assets/stylesheets/common.scss */ /* line 42, app/assets/stylesheets/common.scss */
.mb10 { .mb10 {
margin-bottom: 10px; margin-bottom: 10px;
} }
/* line 42, app/assets/stylesheets/common.scss */ /* line 43, app/assets/stylesheets/common.scss */
.mt10 { .mt10 {
margin-top: 10px; margin-top: 10px;
} }
/* line 43, app/assets/stylesheets/common.scss */ /* line 44, app/assets/stylesheets/common.scss */
.mr10 { .mr10 {
margin-right: 10px; margin-right: 10px;
} }
/* line 44, app/assets/stylesheets/common.scss */ /* line 45, app/assets/stylesheets/common.scss */
.ml10 { .ml10 {
margin-left: 10px; margin-left: 10px;
} }
/* line 44, app/assets/stylesheets/common.scss */ /* line 45, app/assets/stylesheets/common.scss */
.ml20 { .ml20 {
margin-left: 20px; margin-left: 20px;
} }
/* line 45, app/assets/stylesheets/common.scss */ /* line 46, app/assets/stylesheets/common.scss */
.textarea-width-100 { .textarea-width-100 {
width: 100%; width: 100%;
resize: none; resize: none;
border: 1px solid #ccc; border: 1px solid #ccc;
} }
/* line 46, app/assets/stylesheets/common.scss */ /* line 47, app/assets/stylesheets/common.scss */
.padding10 { .padding10 {
padding: 10px; padding: 10px;
} }
/* line 47, app/assets/stylesheets/common.scss */ /* line 48, app/assets/stylesheets/common.scss */
.padding5-10 { .padding5-10 {
padding: 5px 10px; padding: 5px 10px;
} }
/* line 48, app/assets/stylesheets/common.scss */ /* line 49, app/assets/stylesheets/common.scss */
.position-r { .position-r {
position: relative; position: relative;
} }
/* line 49, app/assets/stylesheets/common.scss */ /* line 50, app/assets/stylesheets/common.scss */
.color-grey-c { .color-grey-c {
color: #ccc; color: #ccc;
} }
/* line 50, app/assets/stylesheets/common.scss */ /* line 51, app/assets/stylesheets/common.scss */
.color-blue { .color-blue {
color: #4CACFF; color: #4CACFF;
} }
/* line 51, app/assets/stylesheets/common.scss */ /* line 52, app/assets/stylesheets/common.scss */
.color-orange {
color: #ff6800;
}
/* line 53, app/assets/stylesheets/common.scss */
.inline-block { .inline-block {
display: inline-block; display: inline-block;
} }
/* line 52, app/assets/stylesheets/common.scss */ /* line 54, app/assets/stylesheets/common.scss */
.hide { .hide {
display: none; display: none;
} }
/* line 53, app/assets/stylesheets/common.scss */ /* line 55, app/assets/stylesheets/common.scss */
.show { .show {
display: block; display: block;
} }
/* line 57, app/assets/stylesheets/common.scss */
.input_small {
-webkit-box-flex: 0 !important;
flex: 0 0 6% !important;
}
/* line 58, app/assets/stylesheets/common.scss */
.input_middle {
-webkit-box-flex: 0 !important;
flex: 0 0 13% !important;
}
/* line 4, app/assets/stylesheets/cooperative/carousels.scss */ /* line 4, app/assets/stylesheets/cooperative/carousels.scss */
.cooperative-carousels-index-page .carousels-card .custom-carousel-item > .drag { .cooperative-carousels-index-page .carousels-card .custom-carousel-item > .drag {
cursor: move; cursor: move;
Loading…
Cancel
Save