diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index 49fe9ca50..e7b4bdac6 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -239,7 +239,7 @@ class ApplicationController < ActionController::Base
uid_logger("user_setup: " + (User.current.logged? ? "#{User.current.try(:login)} (id=#{User.current.try(:id)})" : "anonymous"))
if !User.current.logged? && Rails.env.development?
- User.current = User.find 12
+ User.current = User.find 1
end
@@ -567,6 +567,10 @@ class ApplicationController < ActionController::Base
time.blank? ? '' : time.strftime("%Y-%m-%d %H:%M:%S")
end
+ def strf_date(date)
+ date.blank? ? '' : date.strftime("%Y-%m-%d")
+ end
+
def logger_error(error)
Rails.logger.error(error.message)
error.backtrace.each { |msg| Rails.logger.error(msg) }
diff --git a/app/controllers/concerns/render_expand.rb b/app/controllers/concerns/render_expand.rb
index 4fd77c285..b0f26f43e 100644
--- a/app/controllers/concerns/render_expand.rb
+++ b/app/controllers/concerns/render_expand.rb
@@ -14,7 +14,7 @@ module RenderExpand
kit.stylesheets << Rails.root.join('app/templates', path)
end
- send_data kit.to_pdf, filename: options[:filename], type: 'application/pdf'
+ send_data kit.to_pdf, filename: options[:filename], disposition: options[:disposition] || 'attachment', type: 'application/pdf'
end
end
end
\ No newline at end of file
diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb
index 75d515186..106ba3dd4 100644
--- a/app/controllers/courses_controller.rb
+++ b/app/controllers/courses_controller.rb
@@ -13,7 +13,7 @@ class CoursesController < ApplicationController
before_action :require_login, except: [:index, :show, :students, :teachers, :board_list, :mine, :all_course_groups,
:left_banner, :top_banner]
- before_action :check_account, only: [:new, :create, :apply_to_join_course]
+ before_action :check_account, only: [:new, :create, :apply_to_join_course, :join_excellent_course]
before_action :check_auth, except: [:index, :show, :students, :teachers, :board_list, :mine, :all_course_groups,
:left_banner, :top_banner, :apply_to_join_course, :exit_course]
before_action :set_course, :user_course_identity, only: [:show, :update, :destroy, :settings, :set_invite_code_halt,
@@ -25,12 +25,13 @@ class CoursesController < ApplicationController
:transfer_to_course_group, :delete_from_course, :search_users, :add_students_by_search,
:base_info, :get_historical_courses, :create_group_by_importing_file,
:attahcment_category_list,:export_member_scores_excel, :duplicate_course,
- :switch_to_teacher, :switch_to_assistant, :switch_to_student, :exit_course]
+ :switch_to_teacher, :switch_to_assistant, :switch_to_student, :exit_course,
+ :informs, :update_informs, :join_excellent_course, :online_learning]
before_action :teacher_allowed, only: [:update, :destroy, :settings, :search_teacher_candidate,
:transfer_to_course_group, :delete_from_course,
:search_users, :add_students_by_search, :get_historical_courses, :add_teacher_popup, :add_teacher]
before_action :admin_allowed, only: [:set_invite_code_halt, :set_public_or_private, :change_course_admin,
- :set_course_group, :create_group_by_importing_file]
+ :set_course_group, :create_group_by_importing_file, :update_informs]
before_action :teacher_or_admin_allowed, only: [:graduation_group_list, :create_graduation_group, :join_graduation_group,
:change_course_teacher, :export_member_scores_excel, :course_group_list,
:teacher_application_review, :apply_teachers, :delete_course_teacher]
@@ -117,13 +118,19 @@ class CoursesController < ApplicationController
authentication: params[:authentication], professional_certification: params[:professional_certification])
@course.tea_id = current_user.id
- @course_list_name = params[:course_list_name].strip
- @course_list = CourseList.find_by(name: @course_list_name)
- if @course_list
- @course.course_list_id = @course_list.id
+ if params[:subject_id].blank?
+ @course_list_name = params[:course_list_name].strip
+ @course_list = CourseList.find_by(name: @course_list_name)
+ if @course_list
+ @course.course_list_id = @course_list.id
+ else
+ new_course_list = CourseList.create!(name: @course_list_name, user_id: current_user.id, is_admin: 0)
+ @course.course_list_id = new_course_list.id
+ end
else
- new_course_list = CourseList.create!(name: @course_list_name, user_id: current_user.id, is_admin: 0)
- @course.course_list_id = new_course_list.id
+ @course.start_date = params[:start_date]
+ @course.subject_id = params[:subject_id]
+ @course.excellent = true
end
@course.is_end = @course.end_date.present? && @course.end_date < Date.today
@@ -133,6 +140,13 @@ class CoursesController < ApplicationController
CourseInfo.create!(user_id: current_user.id, course_id: @course.id)
CourseMember.create!(course_id: @course.id, user_id: current_user.id, role: 1)
+ # 将实践课程的教学团队成员以教师身份加入课堂
+ if @course.subject
+ @course.subject.subject_members.where.not(user_id: current_user.id).each do |s_member|
+ CourseMember.create!(course_id: @course.id, user_id: s_member.user_id, role: 2)
+ end
+ end
+
course_module_types = params[:course_module_types]
@course.create_course_modules(course_module_types)
end
@@ -151,7 +165,6 @@ class CoursesController < ApplicationController
begin
extra_params = Hash.new
extra_params[:school_id] = @school.id
- extra_params[:is_public] = params[:is_public].present? ? params[:is_public] : 0
if @course.is_end && (course_params[:end_date].blank? || course_params[:end_date].to_date > Date.today)
extra_params[:is_end] = 0
@@ -162,13 +175,18 @@ class CoursesController < ApplicationController
extra_params[:authentication] = params[:authentication]
extra_params[:professional_certification] = params[:professional_certification]
- @course_list_name = params[:course_list_name].strip
- @course_list = CourseList.find_by(name: @course_list_name)
- if @course_list
- extra_params[:course_list_id] = @course_list.id
+ if @course.subject
+ @course.start_date = params[:start_date]
else
- new_course_list = CourseList.create(name: @course_list_name, user_id: current_user.id, is_admin: 0)
- extra_params[:course_list_id] = new_course_list.id
+ extra_params[:is_public] = params[:is_public].present? ? params[:is_public] : 0
+ @course_list_name = params[:course_list_name].strip
+ @course_list = CourseList.find_by(name: @course_list_name)
+ if @course_list
+ extra_params[:course_list_id] = @course_list.id
+ else
+ new_course_list = CourseList.create(name: @course_list_name, user_id: current_user.id, is_admin: 0)
+ extra_params[:course_list_id] = new_course_list.id
+ end
end
@course.update_attributes!(course_params.merge(extra_params))
@@ -183,6 +201,42 @@ class CoursesController < ApplicationController
end
end
+ def join_excellent_course
+ tip_exception("您已是课堂成员") if current_user.member_of_course?(@course)
+ tip_exception("请通过邀请码加入课堂") unless @course.excellent
+ tip_exception("该课堂已结束") if @course.is_end
+ begin
+ new_student = CourseMember.new(user_id: current_user.id, course_id: @course.id, role: 4)
+ new_student.save!
+
+ CourseAddStudentCreateWorksJob.perform_later(@course.id, [current_user.id])
+ StudentJoinCourseNotifyJob.perform_later(current_user.id, @course.id)
+ normal_status(0, "加入成功")
+ rescue => e
+ uid_logger_error(e.message)
+ tip_exception(e.message)
+ end
+ end
+
+ def informs
+
+ end
+
+ def update_informs
+ tip_exception("公告内容不能为空") if params[:description].blank?
+ inform = @course.inform || Inform.new(container: @course)
+ inform.description = params[:description]
+ inform.save!
+ normal_status("更新成功")
+ end
+
+ def online_learning
+ @subject = @course.subject
+ @stages = @subject&.stages
+ @user = current_user
+ @start_learning = @user_course_identity == Course::STUDENT && @subject&.learning?(current_user.id)
+ end
+
def search_course_list
search = params[:search] ? "%#{params[:search].strip}%" : "%%"
@course_lists = CourseList.where("name like ?", "#{search}")
@@ -1075,14 +1129,31 @@ class CoursesController < ApplicationController
def validate_course_name
tip_exception("课堂名称不能为空!") if params[:course][:name].blank?
- tip_exception("课程名称不能为空!") if params[:course_list_name].blank?
- tip_exception("课堂名称应以课程名称开头命名") unless params[:course][:name].index(params[:course_list_name]) &&
+ if params[:subject_id].blank? || (@course && @course.subject.blank?)
+ tip_exception("课程名称不能为空!") if params[:course_list_name].blank?
+ tip_exception("课堂名称应以课程名称开头命名") unless params[:course][:name].index(params[:course_list_name]) &&
params[:course][:name].index(params[:course_list_name]) == 0
+ else
+ @subject = @course.present? ? @course.subject : Subject.find_by!(id: params[:subject_id])
+ tip_exception("开始时间不能为空") if params[:start_date].blank?
+ tip_exception("结束时间不能为空") if params[:end_date].blank?
+ tip_exception("结束时间必须晚于开始时间") if params[:end_date] <= params[:start_date]
+ tip_exception("开始时间和结束时间不能与往期开课时间重叠") if @course.nil? && @subject.max_course_end_date && params[:start_date] <= strf_date(@subject.max_course_end_date)
+ validate_start_end_date if @course.present?
+ tip_exception("开放课堂必须包含公告栏和在线学习模块") unless params[:course_module_types].include?("announcement") && params[:course_module_types].include?("online_learning")
+ end
tip_exception("课堂所属单位不能为空!") if params[:school].blank?
tip_exception("请至少添加一个课堂模块") if params[:course_module_types].blank?
@school = School.find_by!(name: params[:school].strip)
end
+ def validate_start_end_date
+ prev_course = @subject.courses.where("id < #{@course.id}").last
+ next_course = @subject.courses.where("id > #{@course.id}").first
+ tip_exception("开始时间和结束时间不能与其他期开课时间重叠") if prev_course && params[:start_date] <= strf_date(prev_course.end_date)
+ tip_exception("开始时间和结束时间不能与其他期开课时间重叠") if next_course && params[:end_date] >= strf_date(next_course.start_date)
+ end
+
# 超级管理员和课堂管理员的权限判断
def admin_allowed
unless @user_course_identity < Course::PROFESSOR
diff --git a/app/controllers/exercises_controller.rb b/app/controllers/exercises_controller.rb
index e92c3b266..781ede214 100644
--- a/app/controllers/exercises_controller.rb
+++ b/app/controllers/exercises_controller.rb
@@ -1291,7 +1291,7 @@ class ExercisesController < ApplicationController
normal_status(0,"正在下载中")
else
set_export_cookies
- render pdf: 'exercise_export/blank_exercise', filename: filename_, stylesheets: stylesheets
+ render pdf: 'exercise_export/blank_exercise', filename: filename_, stylesheets: stylesheets, disposition: 'inline', type:"pdf_attachment.content_type",stream:false
end
end
diff --git a/app/controllers/files_controller.rb b/app/controllers/files_controller.rb
index 2cfa61cc9..bcfed25dd 100644
--- a/app/controllers/files_controller.rb
+++ b/app/controllers/files_controller.rb
@@ -260,7 +260,12 @@ class FilesController < ApplicationController
return normal_status(-2, "该课程下没有id为 #{params[:id]}的资源") if @file.nil?
return normal_status(403, "您没有权限进行该操作") if @user != @file.author && !@user.teacher_of_course?(@course) && !@file.public?
-
+ @is_pdf = false
+ file_content_type = @file.content_type
+ file_ext_type = File.extname(@file.filename).strip.downcase[1..-1]
+ if (file_content_type.present? && file_content_type.downcase.include?("pdf")) || (file_ext_type.present? && file_ext_type.include?("pdf"))
+ @is_pdf = true
+ end
@attachment_histories = @file.attachment_histories
end
diff --git a/app/controllers/homework_commons_controller.rb b/app/controllers/homework_commons_controller.rb
index ff1ee4e96..5d1733983 100644
--- a/app/controllers/homework_commons_controller.rb
+++ b/app/controllers/homework_commons_controller.rb
@@ -171,6 +171,14 @@ class HomeworkCommonsController < ApplicationController
@student_works = @student_works.where(user_id: group_user_ids)
end
+ if @homework.homework_type == "group" && !params[:member_work].blank?
+ if params[:member_work].to_i == 1
+ @student_works = @student_works.where("user_id = commit_user_id")
+ elsif params[:member_work].to_i == 0
+ @student_works = @student_works.where("user_id != commit_user_id")
+ end
+ end
+
# 输入姓名和学号搜索
# TODO user_extension 如果修改 请调整
unless params[:search].blank?
diff --git a/app/controllers/myshixuns_controller.rb b/app/controllers/myshixuns_controller.rb
index c36ad09b6..69bd01dde 100644
--- a/app/controllers/myshixuns_controller.rb
+++ b/app/controllers/myshixuns_controller.rb
@@ -23,24 +23,19 @@ class MyshixunsController < ApplicationController
begin
ActiveRecord::Base.transaction do
begin
- @shixun = Shixun.select(:id, :identifier).find(@myshixun.shixun_id)
+ @shixun = Shixun.select(:id, :identifier, :challenges_count).find(@myshixun.shixun_id)
@myshixun.destroy!
-
StudentWork.where(:myshixun_id => @myshixun.id).update_all(:myshixun_id => 0, :work_status => 0)
-
- # 实训在申请发布前,是否玩过实训,如果玩过需要更改记录,防止二次重置
- shixun_mod = ShixunModify.where(:shixun_id => @shixun.id, :myshixun_id => @myshixun.id, :status => 1).take
- shixun_mod.update_column(:status, 0) if shixun_mod
rescue Exception => e
logger.error("######reset_my_game_failed:#{e.message}")
raise("ActiveRecord::RecordInvalid")
end
end
# 删除版本库
- GitService.delete_repository(repo_path: @repo_path)
+ GitService.delete_repository(repo_path: @repo_path) unless @shixun.is_choice_type?
rescue Exception => e
if e.message != "ActiveRecord::RecordInvalid"
- logger.error("######delete_repository_error:#{e.message}")
+ logger.error("######delete_repository_error-:#{e.message}")
end
raise "delete_repository_error:#{e.message}"
end
diff --git a/app/controllers/student_works_controller.rb b/app/controllers/student_works_controller.rb
index 68d52bd74..b4677f4e3 100644
--- a/app/controllers/student_works_controller.rb
+++ b/app/controllers/student_works_controller.rb
@@ -4,7 +4,7 @@ class StudentWorksController < ApplicationController
before_action :require_login, :check_auth
before_action :find_homework, only: [:new, :create, :search_member_list, :check_project, :relate_project,
- :cancel_relate_project]
+ :cancel_relate_project, :delete_work]
before_action :find_work, only: [:shixun_work_report, :adjust_review_score, :shixun_work, :commit_des, :update_des,
:adjust_score, :show, :adjust_score, :supply_attachments, :revise_attachment,
:comment_list, :add_score, :add_score_reply, :destroy_score, :appeal_anonymous_score,
@@ -15,12 +15,12 @@ class StudentWorksController < ApplicationController
before_action :teacher_allowed, only: [:adjust_score, :adjust_review_score, :deal_appeal_score]
before_action :course_student, only: [:new, :commit_des, :update_des, :create, :edit, :update, :search_member_list, :relate_project,
- :cancel_relate_project, :relate_project]
+ :cancel_relate_project, :relate_project, :delete_work]
before_action :my_work, only: [:commit_des, :update_des, :edit, :update, :revise_attachment, :appeal_anonymous_score,
:cancel_appeal]
- before_action :edit_duration, only: [:edit, :update]
+ before_action :edit_duration, only: [:edit, :update, :delete_work]
before_action :end_or_late, only: [:new, :create, :search_member_list, :commit_des, :update_des]
before_action :require_score_id, only: [:destroy_score, :add_score_reply, :appeal_anonymous_score, :deal_appeal_score, :cancel_appeal]
@@ -60,6 +60,25 @@ class StudentWorksController < ApplicationController
@members = @members.page(page).per(limit).includes(:course_group, user: :user_extension)
end
+ def delete_work
+ ActiveRecord::Base.transaction do
+ begin
+ work = @homework.student_works.find_by!(user_id: params[:user_id])
+ tip_exception("只有组长才能删除组员") if work.commit_user_id != current_user.id
+ work.update_attributes(description: nil, project_id: 0,
+ late_penalty: 0, work_status: 0,
+ commit_time: nil, update_time: nil, group_id: 0,
+ commit_user_id: nil, final_score: nil, work_score: nil, teacher_score: nil, teaching_asistant_score: nil)
+ work.attachments.destroy_all
+ work.tidings.destroy_all
+ normal_status("删除成功")
+ rescue Exception => e
+ uid_logger(e.message)
+ tip_exception(e.message)
+ end
+ end
+ end
+
def create
student_work = @homework.student_works.find_or_create_by(user_id: current_user.id)
@@ -123,8 +142,9 @@ class StudentWorksController < ApplicationController
@current_user = current_user
if @homework.homework_type == "group"
# todo user_extension
+ @commit_user_id = @work.commit_user_id
@work_members = @course.students.where(user_id: @homework.student_works.where(group_id: @work.group_id).pluck(:user_id)).
- order("course_members.id=#{@work.user_id} desc").includes(:course_group, user: :user_extension)
+ order("course_members.user_id=#{@work.commit_user_id} desc").includes(:course_group, user: :user_extension)
end
end
@@ -136,7 +156,7 @@ class StudentWorksController < ApplicationController
begin
@work.description = params[:description]
@work.update_time = Time.now
- @work.commit_user_id = current_user.id
+ # @work.commit_user_id = current_user.id
if @work.save!
Attachment.associate_container(params[:attachment_ids], @work.id, @work.class)
@@ -151,7 +171,8 @@ class StudentWorksController < ApplicationController
# 原成员更新描述、更新时间以及附件
@homework.student_works.where(group_id: @work.group_id, user_id: (work_user_ids & params_user_ids)).each do |work|
- work.update_attributes(update_time: Time.now, description: @work.description, commit_user_id: current_user.id)
+ # work.update_attributes(update_time: Time.now, description: @work.description, commit_user_id: current_user.id)
+ work.update_attributes(update_time: Time.now, description: @work.description)
work.attachments.destroy_all
@work.attachments.each do |attachment|
att = attachment.copy
@@ -179,7 +200,7 @@ class StudentWorksController < ApplicationController
stu_work.update_attributes(user_id: user_id, description: @work.description, homework_common_id: @homework.id,
project_id: @work.project_id, late_penalty: @work.late_penalty,
work_status: @work.work_status, commit_time: Time.now, update_time: Time.now,
- group_id: @work.group_id, commit_user_id: current_user.id)
+ group_id: @work.group_id, commit_user_id: @work.commit_user_id)
@work.attachments.each do |attachment|
att = attachment.copy
att.author_id = attachment.author_id
@@ -460,7 +481,7 @@ class StudentWorksController < ApplicationController
filename_ = "#{@use&.student_id}_#{@use&.real_name}_#{@shixun&.name}_#{Time.now.strftime('%Y%m%d_%H%M%S')}"
filename = Base64.urlsafe_encode64(filename_.strip)
stylesheets = %w(shixun_work/shixun_work.css shared/codemirror.css)
- render pdf: 'shixun_work/shixun_work', filename: filename, stylesheets: stylesheets
+ render pdf: 'shixun_work/shixun_work', filename: filename, stylesheets: stylesheets, disposition: 'inline', type:"pdf_attachment.content_type",stream:false
end
# 作品调分
diff --git a/app/controllers/subjects_controller.rb b/app/controllers/subjects_controller.rb
index 9b28d9a10..ce2154fea 100644
--- a/app/controllers/subjects_controller.rb
+++ b/app/controllers/subjects_controller.rb
@@ -25,13 +25,13 @@ class SubjectsController < ApplicationController
if reorder == "myshixun_count"
if select
@subjects = Subject.find_by_sql("SELECT subjects.id, subjects.user_id, subjects.name, subjects.stages_count, subjects.repertoire_id, subjects.status,
- subjects.shixuns_count, sum(shixuns.myshixuns_count) AS myshixun_member_count FROM subjects join stage_shixuns
+ subjects.shixuns_count, subjects.excellent, sum(shixuns.myshixuns_count) AS myshixun_member_count FROM subjects join stage_shixuns
on stage_shixuns.subject_id = subjects.id join shixuns on shixuns.id = stage_shixuns.shixun_id where
subjects.hidden = 0 AND subjects.status = 2 AND subjects.name like '%#{search}%'
AND subjects.repertoire_id = #{select} GROUP BY subjects.id ORDER BY myshixun_member_count DESC")
else
@subjects = Subject.find_by_sql("SELECT subjects.id, subjects.user_id, subjects.name, subjects.stages_count, subjects.repertoire_id, subjects.status,
- subjects.shixuns_count, sum(shixuns.myshixuns_count) AS myshixun_member_count FROM subjects join stage_shixuns
+ subjects.shixuns_count, subjects.excellent, sum(shixuns.myshixuns_count) AS myshixun_member_count FROM subjects join stage_shixuns
on stage_shixuns.subject_id = subjects.id join shixuns on shixuns.id = stage_shixuns.shixun_id where
subjects.hidden = 0 AND subjects.status = 2 AND subjects.name like '%#{search}%'
GROUP BY subjects.id ORDER BY myshixun_member_count DESC")
diff --git a/app/helpers/courses_helper.rb b/app/helpers/courses_helper.rb
index f14159cc2..6a4353aa2 100644
--- a/app/helpers/courses_helper.rb
+++ b/app/helpers/courses_helper.rb
@@ -28,6 +28,10 @@ module CoursesHelper
def module_url mod, course
return nil if mod.blank? or course.blank?
case mod.module_type
+ when "announcement"
+ "/courses/#{course.id}/informs"
+ when "online_learning"
+ "/courses/#{course.id}/online_learning"
when "shixun_homework"
"/courses/#{course.id}/shixun_homeworks/#{mod.id}"
when "common_homework"
@@ -261,4 +265,10 @@ module CoursesHelper
group_info
end
+ def last_subject_shixun user_id, subject
+ myshixun = Myshixun.where(user_id: user_id, shixun_id: subject&.shixuns).order("updated_at desc").first
+ return "" unless myshixun
+ stage_shixun = subject&.stage_shixuns.where(shixun_id: myshixun.shixun_id).take
+ progress = stage_shixun&.position.to_s + "-" + stage_shixun&.position.to_s + " " + myshixun.shixun&.name
+ end
end
diff --git a/app/helpers/export_helper.rb b/app/helpers/export_helper.rb
index 5d36c465f..f352b1e38 100644
--- a/app/helpers/export_helper.rb
+++ b/app/helpers/export_helper.rb
@@ -146,8 +146,8 @@ module ExportHelper
w_6 = "--"
end
w_7 = w.work_status == 0 ? '--' : myshixun.try(:passed_count).to_s+"/"+shixun.challenges_count.to_s
- w_8 = myshixun ? myshixun.try(:passed_time) == "--" ? "--" : format_time(myshixun.try(:passed_time)) : "--" # 通关时间
- w_9 = myshixun ? (myshixun.try(:passed_count) > 0 ? myshixun.total_spend_time : '--') : "--" #总耗时
+ w_8 = myshixun ? myshixun.try(:passed_time).to_s == "--" ? "--" : format_time(myshixun.try(:passed_time)) : "--" # 通关时间
+ w_9 = myshixun ? (myshixun.try(:passed_count).to_i > 0 ? myshixun.total_spend_time : '--') : "--" #总耗时
w_10 = myshixun ? myshixun.output_times : 0 #评测次数
w_11 = myshixun ? myshixun.total_score : "--" #获得经验值
w_12 = w.final_score.present? ? w.final_score : 0
@@ -543,7 +543,7 @@ module ExportHelper
end
def format_sheet_name name
- name = name.gsub(":", "-")
+ name = name.gsub(":", "-").gsub("/", "_")
end
def rename_same_file(name, index)
diff --git a/app/helpers/stages_helper.rb b/app/helpers/stages_helper.rb
index de6501fa6..e0df514e3 100644
--- a/app/helpers/stages_helper.rb
+++ b/app/helpers/stages_helper.rb
@@ -2,7 +2,7 @@ module StagesHelper
# 章节实训的通关情况
def stage_myshixun_status shixun, user
- myshixun = Myshixun.where(user_id: user.id, shixun_id: shixun.id).first
+ myshixun = Myshixun.where(user_id: user.id, shixun_id: shixun.id).take
myshixun.try(:status) == 1 ? 1 : 0
end
diff --git a/app/models/course.rb b/app/models/course.rb
index 25a017faa..b7bea6ec0 100644
--- a/app/models/course.rb
+++ b/app/models/course.rb
@@ -5,7 +5,11 @@ class Course < ApplicationRecord
belongs_to :teacher, class_name: 'User', foreign_key: :tea_id # 定义一个方法teacher,该方法通过tea_id来调用User表
belongs_to :school, class_name: 'School', foreign_key: :school_id #定义一个方法school,该方法通过school_id来调用School表
- belongs_to :course_list
+ belongs_to :course_list, optional: true
+
+ # 所属实践课程
+ belongs_to :subject, optional: true
+ has_one :inform, as: :container, dependent: :destroy
has_many :course_infos, dependent: :destroy
# 课堂左侧导航栏的模块
@@ -87,7 +91,7 @@ class Course < ApplicationRecord
NORMAL = 6 # 普通用户
Anonymous = 7 # 普未登录
- validates :name, presence: true, length: { maximum: 30 }
+ validates :name, presence: true, length: { maximum: 60 }
after_create :create_board_sync, :act_as_course_activity, :send_tiding
@@ -176,7 +180,7 @@ class Course < ApplicationRecord
end
def all_course_module_types
- %w[activity shixun_homework common_homework group_homework graduation exercise poll attachment board course_group]
+ %w[activity announcement online_learning shixun_homework common_homework group_homework graduation exercise poll attachment board course_group]
end
def get_course_module_by_type(type)
@@ -334,6 +338,8 @@ class Course < ApplicationRecord
def get_name_by_type(type)
case type
when 'activity' then '动态'
+ when 'announcement' then '公告栏'
+ when 'online_learning' then '在线学习'
when 'shixun_homework' then '实训作业'
when 'common_homework' then '普通作业'
when 'group_homework' then '分组作业'
@@ -350,15 +356,17 @@ class Course < ApplicationRecord
def get_position_by_type(type)
case type
when 'activity' then 1
- when 'shixun_homework' then 2
- when 'common_homework' then 3
- when 'group_homework' then 4
- when 'graduation' then 5
- when 'exercise' then 6
- when 'poll' then 7
- when 'attachment' then 8
- when 'board' then 9
- when 'course_group' then 10
+ when 'announcement' then 2
+ when 'online_learning' then 3
+ when 'shixun_homework' then 4
+ when 'common_homework' then 5
+ when 'group_homework' then 6
+ when 'graduation' then 7
+ when 'exercise' then 8
+ when 'poll' then 9
+ when 'attachment' then 10
+ when 'board' then 11
+ when 'course_group' then 12
else 100
end
end
diff --git a/app/models/inform.rb b/app/models/inform.rb
new file mode 100644
index 000000000..faf1d48e6
--- /dev/null
+++ b/app/models/inform.rb
@@ -0,0 +1,3 @@
+class Inform < ApplicationRecord
+ belongs_to :container, polymorphic: true, optional: true
+end
diff --git a/app/models/myshixun.rb b/app/models/myshixun.rb
index a4f05f2ce..80074df6e 100644
--- a/app/models/myshixun.rb
+++ b/app/models/myshixun.rb
@@ -82,7 +82,7 @@ class Myshixun < ApplicationRecord
# 通关时间
def passed_time
- self.status == 1 ? self.games.map(&:end_time).max : "--"
+ self.status == 1 ? self.games.select{|game| game.status == 2}.map(&:end_time).max : "--"
end
# 耗时
diff --git a/app/models/partner.rb b/app/models/partner.rb
new file mode 100644
index 000000000..f2f8cca2a
--- /dev/null
+++ b/app/models/partner.rb
@@ -0,0 +1,3 @@
+class Partner < ApplicationRecord
+ has_many :users
+end
diff --git a/app/models/searchable/course.rb b/app/models/searchable/course.rb
index 93c69c9e8..5060d9ddd 100644
--- a/app/models/searchable/course.rb
+++ b/app/models/searchable/course.rb
@@ -21,11 +21,12 @@ module Searchable::Course
def to_searchable_json
{
id: id,
- author_name: teacher.real_name,
- author_school_name: teacher.school_name,
+ author_name: teacher&.real_name,
+ author_school_name: teacher&.school_name,
visits_count: visits,
members_count: members_count,
- is_public: is_public == 1
+ is_public: is_public == 1,
+ first_category_url: ApplicationController.helpers.module_url(none_hidden_course_modules.first, self)
}
end
diff --git a/app/models/subject.rb b/app/models/subject.rb
index eb8930e3b..113460375 100644
--- a/app/models/subject.rb
+++ b/app/models/subject.rb
@@ -18,6 +18,9 @@ class Subject < ApplicationRecord
has_many :tidings, as: :container, dependent: :destroy
has_many :stages, -> { order("stages.position ASC") }, dependent: :destroy
+ # 开放课堂
+ has_many :courses, -> { order("courses.id ASC") }
+
validates :name, length: { maximum: 40 }
validates :description, length: { maximum: 5000 }
validates :learning_notes, length: { maximum: 500 }
@@ -31,6 +34,11 @@ class Subject < ApplicationRecord
self.tidings << Tiding.new(user_id: self.user_id, trigger_user_id: self.user_id, belong_container_id: self.id, belong_container_type: 'Subject', tiding_type: "System", viewed: 0)
end
+ # 所有开课课堂的最大结束时间
+ def max_course_end_date
+ courses.pluck(:end_date).max
+ end
+
# 挑战过路径的成员数
def member_count
shixuns.pluck(:myshixuns_count).sum
@@ -92,4 +100,8 @@ class Subject < ApplicationRecord
challenges = Challenge.where(shixun_id: shixuns.unhidden)
@tags = ChallengeTag.where(challenge_id: challenges).pluck(:name).uniq
end
+
+ def learning? user_id
+ Myshixun.where(user_id: user_id, shixun_id: shixuns).exists?
+ end
end
\ No newline at end of file
diff --git a/app/models/user.rb b/app/models/user.rb
index 9c3d1af39..2cd515261 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -138,6 +138,9 @@ class User < ApplicationRecord
# 视频
has_many :videos, dependent: :destroy
+ # 客户管理
+ belongs_to :partner
+
# Groups and active users
scope :active, lambda { where(status: STATUS_ACTIVE) }
@@ -378,6 +381,8 @@ class User < ApplicationRecord
@identity =
if admin?
User::EDU_ADMIN
+ elsif business?
+ User::EDU_BUSINESS
elsif creator_of_shixun?(shixun)
User::EDU_SHIXUN_MANAGER
elsif member_of_shixun?(shixun)
diff --git a/app/views/courses/index.json.jbuilder b/app/views/courses/index.json.jbuilder
index 7b404211b..8a0d06475 100644
--- a/app/views/courses/index.json.jbuilder
+++ b/app/views/courses/index.json.jbuilder
@@ -12,5 +12,6 @@ json.courses @courses do |course|
json.is_accessible course.is_public == 1 || @user.course_identity(course) < Course::NORMAL
json.is_end course.is_end
json.first_category_url module_url(course.none_hidden_course_modules.first, course)
+ json.excellent course.excellent
end
json.courses_count @courses_count
diff --git a/app/views/courses/informs.json.jbuilder b/app/views/courses/informs.json.jbuilder
new file mode 100644
index 000000000..d584be917
--- /dev/null
+++ b/app/views/courses/informs.json.jbuilder
@@ -0,0 +1 @@
+json.description @course.inform&.description
\ No newline at end of file
diff --git a/app/views/courses/online_learning.json.jbuilder b/app/views/courses/online_learning.json.jbuilder
new file mode 100644
index 000000000..bec8ff301
--- /dev/null
+++ b/app/views/courses/online_learning.json.jbuilder
@@ -0,0 +1,11 @@
+json.stages @stages do |stage|
+ json.partial! 'stages/stage', locals: {stage: stage, user:@user, subject:@subject}
+end
+
+json.description @subject&.description
+
+json.start_learning @start_learning
+
+json.learned @start_learning ? @subject&.my_subject_progress : 0
+
+json.last_shixun @start_learning ? last_subject_shixun(@user.id, @subject) : ""
\ No newline at end of file
diff --git a/app/views/courses/settings.json.jbuilder b/app/views/courses/settings.json.jbuilder
index 8c82d15ea..be4470a66 100644
--- a/app/views/courses/settings.json.jbuilder
+++ b/app/views/courses/settings.json.jbuilder
@@ -1,5 +1,5 @@
-json.course_list_id @course.course_list.id
-json.course_list_name @course.course_list.name
+json.course_list_id @course.course_list&.id
+json.course_list_name @course.course_list&.name
json.name @course.name
json.course_id @course.id
json.school @course.school&.name
@@ -9,4 +9,6 @@ json.end_date @course.end_date
json.is_public @course.is_public
json.course_module_types @course.course_modules.where(hidden: 0).pluck(:module_type)
json.authentication @course.authentication
-json.professional_certification @course.professional_certification
\ No newline at end of file
+json.professional_certification @course.professional_certification
+json.subject_id @course.subject_id
+json.excellent @course.excellent
\ No newline at end of file
diff --git a/app/views/courses/top_banner.json.jbuilder b/app/views/courses/top_banner.json.jbuilder
index c0a1ff956..916fccb05 100644
--- a/app/views/courses/top_banner.json.jbuilder
+++ b/app/views/courses/top_banner.json.jbuilder
@@ -21,6 +21,7 @@ json.switch_to_assistant switch_assistant_role(@is_student, @course, @user)
#json.join_course !@user.member_of_course?(@course)
#json.copy_course !@user.member_of_course?(@course) && @user.is_teacher?
json.course_identity @user_course_identity
+json.excellent @course.excellent
if @course.is_end == 0
json.days_remaining (@course.end_date.to_date - Time.now.to_date).to_i
end
diff --git a/app/views/files/histories.json.jbuilder b/app/views/files/histories.json.jbuilder
index f30cf6b1b..9dfec4fd4 100644
--- a/app/views/files/histories.json.jbuilder
+++ b/app/views/files/histories.json.jbuilder
@@ -1,2 +1,3 @@
+json.is_pdf @is_pdf
json.partial! 'attachments/attachment_small', attachment: @file
json.partial! "attachment_histories/list", attachment_histories: @attachment_histories
diff --git a/app/views/homework_commons/index.json.jbuilder b/app/views/homework_commons/index.json.jbuilder
index 9107c9634..daf7d9df2 100644
--- a/app/views/homework_commons/index.json.jbuilder
+++ b/app/views/homework_commons/index.json.jbuilder
@@ -17,6 +17,8 @@ json.homeworks @homework_commons.each do |homework|
json.status_time curr_status[:time]
json.time_status curr_status[:time_status]
json.allow_late homework.allow_late
+ # 只有在主目录才显示
+ json.upper_category_name homework.course_second_category&.name unless params[:category]
unless curr_status[:status].include?("未发布")
json.commit_count studentwork_count homework, 1, @member
diff --git a/app/views/homework_commons/works_list.json.jbuilder b/app/views/homework_commons/works_list.json.jbuilder
index bbe71661a..08c269670 100644
--- a/app/views/homework_commons/works_list.json.jbuilder
+++ b/app/views/homework_commons/works_list.json.jbuilder
@@ -69,6 +69,7 @@ elsif @user_course_identity == Course::STUDENT
json.project_info project_info @work, @current_user, @user_course_identity
end
json.work_group @work.work_group_name
+ json.is_leader @work.user_id == @work.commit_user_id
end
end
@@ -140,6 +141,7 @@ elsif @homework.homework_type == "group" || @homework.homework_type == "normal"
if @homework.homework_detail_group.base_on_project
json.project_info project_info work, @current_user, @user_course_identity
end
+ json.is_leader work.user_id == work.commit_user_id
json.work_group work.work_group_name
end
diff --git a/app/views/shixuns/collaborators.json.jbuilder b/app/views/shixuns/collaborators.json.jbuilder
index 0101f1e59..e5f612dba 100644
--- a/app/views/shixuns/collaborators.json.jbuilder
+++ b/app/views/shixuns/collaborators.json.jbuilder
@@ -11,7 +11,7 @@ json.array! @members do |member|
json.partial! 'users/user', locals: { user: member.user }
json.user_shixuns_count member.user.shixuns.published.count
#json.fans_count member.user.fan_count
- json.brief_introduction member.user.user_extension.brief_introduction
+ #json.brief_introduction member.user.user_extension.brief_introduction
json.identity member.user.identity
json.school_name member.user.school_name
json.shixun_manager member.role == 1
diff --git a/app/views/student_works/edit.json.jbuilder b/app/views/student_works/edit.json.jbuilder
index ce9d9ff72..88e5354e4 100644
--- a/app/views/student_works/edit.json.jbuilder
+++ b/app/views/student_works/edit.json.jbuilder
@@ -1,12 +1,14 @@
json.partial! "homework_commons/homework_public_navigation", locals: {homework: @homework, course: @course, user: @current_user}
json.work_id @work.id
json.description @work.description
+json.
json.attachments @work.attachments do |atta|
json.partial! "attachments/attachment_simple", locals: {attachment: atta, delete: @work.delete_atta(atta)}
end
if @homework.homework_type == "group"
+ json.is_leader_work @work.user_id == @commit_user_id
json.min_num @homework.homework_detail_group.try(:min_num)
json.max_num @homework.homework_detail_group.try(:max_num)
@@ -15,5 +17,6 @@ if @homework.homework_type == "group"
json.user_name member.user.real_name
json.group_name member.course_group_name
json.student_id member.user.student_id
+ json.is_leader member.user_id == @commit_user_id
end
end
\ No newline at end of file
diff --git a/app/views/student_works/show.json.jbuilder b/app/views/student_works/show.json.jbuilder
index 653ed6450..5756ac9cb 100644
--- a/app/views/student_works/show.json.jbuilder
+++ b/app/views/student_works/show.json.jbuilder
@@ -3,6 +3,7 @@ json.(@work, :description, :commit_time, :update_time)
json.is_evaluation @is_evaluation
json.author_name @is_evaluation ? "匿名" : @work.user.real_name
+json.is_leader_work @work.user_id == @work.commit_user_id if @homework.homework_type == "group"
json.is_author @is_author
json.update_user_name @is_evaluation ? "匿名" : @work.commit_user.try(:real_name)
@@ -17,8 +18,10 @@ unless @is_evaluation
json.project_info project_info @work, @current_user, @user_course_identity
end
- json.work_members @work_members.each do |member|
- json.user_name member.user.real_name
- json.user_login member.user.login
+ json.work_members @work_members.each do |work|
+ json.user_name work.user.real_name
+ json.user_login work.user.login
+ json.work_id work.id
+ json.is_leader work.user_id == work.commit_user_id
end
end
diff --git a/app/views/subjects/_subject.json.jbuilder b/app/views/subjects/_subject.json.jbuilder
index b9a322530..fb52578dd 100644
--- a/app/views/subjects/_subject.json.jbuilder
+++ b/app/views/subjects/_subject.json.jbuilder
@@ -1,5 +1,6 @@
json.array! subjects do |subject|
json.id subject.id
+ json.excellent subject.excellent
json.image_url url_to_avatar(subject)
json.name subject.name
json.tag_name subject.repertoire.try(:name)
diff --git a/app/views/subjects/down_member_position.json.jbuilder b/app/views/subjects/down_member_position.json.jbuilder
index 410b5641b..64038f419 100644
--- a/app/views/subjects/down_member_position.json.jbuilder
+++ b/app/views/subjects/down_member_position.json.jbuilder
@@ -1,3 +1,4 @@
json.members @subject.subject_members do |member|
json.partial! 'subject_member', locals: { user: member.user }
+ json.role member.role
end
\ No newline at end of file
diff --git a/app/views/subjects/show.json.jbuilder b/app/views/subjects/show.json.jbuilder
index af524f5b3..dd4244a15 100644
--- a/app/views/subjects/show.json.jbuilder
+++ b/app/views/subjects/show.json.jbuilder
@@ -6,7 +6,7 @@ json.subject_score @subject.all_score
json.member_count @subject.member_count
json.allow_delete (@subject.status != 2 && @is_creator) || @user.admin?
-json.publish_status publish_status(@subject, @is_creator, @user, @shixuns)
+json.publish_status publish_status(@subject, @is_manager, @user, @shixuns)
json.allow_statistics @is_manager
json.allow_send @user.logged?
json.allow_visit @subject.status > 1 || @is_manager
diff --git a/app/views/users/_user_simple.json.jbuilder b/app/views/users/_user_simple.json.jbuilder
index 0d8f9d50c..3f9feebbe 100644
--- a/app/views/users/_user_simple.json.jbuilder
+++ b/app/views/users/_user_simple.json.jbuilder
@@ -1,4 +1,4 @@
json.id user.id
-json.name user.full_name
+json.name user.real_name
json.login user.login
json.image_url url_to_avatar(user)
\ No newline at end of file
diff --git a/app/views/users/get_navigation_info.json.jbuilder b/app/views/users/get_navigation_info.json.jbuilder
index 377913ccc..ca7f45b45 100644
--- a/app/views/users/get_navigation_info.json.jbuilder
+++ b/app/views/users/get_navigation_info.json.jbuilder
@@ -16,6 +16,9 @@ json.top do
json.moop_cases_url "#{@old_domain}/moop_cases"
json.crowdsourcing_url "/crowdsourcing"
+ # 客户管理
+ json.customer_management_url current_user.partner ? "#{@old_domain}/cooperates/#{current_user.partner.try(:id)}/partner_list" : nil
+
json.career_url do
json.array! @career.to_a do |c|
if c[1].present?
diff --git a/app/views/users/get_user_info.json.jbuilder b/app/views/users/get_user_info.json.jbuilder
index fc2eca762..24f7b21b0 100644
--- a/app/views/users/get_user_info.json.jbuilder
+++ b/app/views/users/get_user_info.json.jbuilder
@@ -14,6 +14,7 @@ if @course
json.course_identity @course_identity
json.course_name @course.name
json.course_public @course.is_public
+ json.course_excellent @course.excellent
if params[:group_info]
json.group_info @course.teacher_group(@user.id) if @course_identity < Course::STUDENT
end
diff --git a/app/views/users/homepage_info.json.jbuilder b/app/views/users/homepage_info.json.jbuilder
index 3fabd110b..112bd215c 100644
--- a/app/views/users/homepage_info.json.jbuilder
+++ b/app/views/users/homepage_info.json.jbuilder
@@ -7,7 +7,7 @@ json.grade @user.grade
json.follow_count @user.follow_count
json.fan_count @user.fan_count
json.identity @user.identity
-json.brief_introduction @user.user_extension&.brief_introduction
+#json.brief_introduction @user.user_extension&.brief_introduction
json.authentication @user.authentication
json.professional_certification @user.professional_certification
json.phone_binded @user.phone_binded?
diff --git a/config/aliyun_vod.yml b/config/aliyun_vod.yml
new file mode 100644
index 000000000..aa6547a62
--- /dev/null
+++ b/config/aliyun_vod.yml
@@ -0,0 +1,16 @@
+defaults: &defaults
+ access_key_id: 'test'
+ access_key_secret: 'test'
+ base_url: 'http://vod.cn-shanghai.aliyuncs.com'
+ cate_id: '-1'
+ callback_url: 'http://47.96.87.25:48080/api/callbacks/aliyun_vod.json'
+ signature_key: 'test12345678'
+
+development:
+ <<: *defaults
+
+test:
+ <<: *defaults
+
+production:
+ <<: *defaults
\ No newline at end of file
diff --git a/config/routes.rb b/config/routes.rb
index 9e115c3a9..988ebbfa2 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -346,6 +346,10 @@ Rails.application.routes.draw do
post 'switch_to_assistant'
post 'switch_to_student'
post 'exit_course'
+ get 'informs'
+ post 'update_informs'
+ get 'online_learning'
+ post 'join_excellent_course'
end
collection do
@@ -432,6 +436,7 @@ Rails.application.routes.draw do
get :check_project
get :cancel_relate_project
post :relate_project
+ delete :delete_work
end
end
end
diff --git a/db/migrate/20190813015633_add_new_column_to_course.rb b/db/migrate/20190813015633_add_new_column_to_course.rb
new file mode 100644
index 000000000..cfadc4ce4
--- /dev/null
+++ b/db/migrate/20190813015633_add_new_column_to_course.rb
@@ -0,0 +1,8 @@
+class AddNewColumnToCourse < ActiveRecord::Migration[5.2]
+ def change
+ add_column :courses, :start_date, :date
+ add_column :courses, :subject_id, :integer, default: 0
+
+ add_index :courses, :subject_id
+ end
+end
diff --git a/db/migrate/20190813074730_add_excellent_to_courses.rb b/db/migrate/20190813074730_add_excellent_to_courses.rb
new file mode 100644
index 000000000..c83fcc702
--- /dev/null
+++ b/db/migrate/20190813074730_add_excellent_to_courses.rb
@@ -0,0 +1,5 @@
+class AddExcellentToCourses < ActiveRecord::Migration[5.2]
+ def change
+ add_column :courses, :excellent, :boolean, default: false
+ end
+end
diff --git a/db/migrate/20190815064542_modify_class_period_for_courses.rb b/db/migrate/20190815064542_modify_class_period_for_courses.rb
new file mode 100644
index 000000000..c0f8600b4
--- /dev/null
+++ b/db/migrate/20190815064542_modify_class_period_for_courses.rb
@@ -0,0 +1,8 @@
+class ModifyClassPeriodForCourses < ActiveRecord::Migration[5.2]
+ def change
+ Course.find_each do |c|
+ c.update_column(:class_period, c.class_period.to_i)
+ end
+ change_column :courses, :class_period, :integer
+ end
+end
diff --git a/db/migrate/20190815085136_modify_path_for_challenges.rb b/db/migrate/20190815085136_modify_path_for_challenges.rb
new file mode 100644
index 000000000..a17fdbd04
--- /dev/null
+++ b/db/migrate/20190815085136_modify_path_for_challenges.rb
@@ -0,0 +1,5 @@
+class ModifyPathForChallenges < ActiveRecord::Migration[5.2]
+ def change
+ change_column :challenges, :path, :text
+ end
+end
diff --git a/dump.rdb b/dump.rdb
index 63b8abb0a..d3784bb93 100644
Binary files a/dump.rdb and b/dump.rdb differ
diff --git a/public/react/src/AppConfig.js b/public/react/src/AppConfig.js
index c09a2cbe7..95be3a8a5 100644
--- a/public/react/src/AppConfig.js
+++ b/public/react/src/AppConfig.js
@@ -10,6 +10,7 @@ broadcastChannelOnmessage('refreshPage', () => {
})
function locationurl(list){
+ debugger
if (window.location.port === "3007") {
} else {
@@ -158,7 +159,8 @@ export function initAxiosInterceptors(props) {
// console.log("401401401")
// }
if (response.data.status === 403||response.data.status === "403") {
- locationurl('/403');
+
+ locationurl('/403');
}
if (response.data.status === 404) {
diff --git a/public/react/src/images/guideimg/guihome6.png b/public/react/src/images/guideimg/guihome6.png
new file mode 100644
index 000000000..dfb5ad2a1
Binary files /dev/null and b/public/react/src/images/guideimg/guihome6.png differ
diff --git a/public/react/src/images/guideimg/guihome7.png b/public/react/src/images/guideimg/guihome7.png
new file mode 100644
index 000000000..0ce5f16ff
Binary files /dev/null and b/public/react/src/images/guideimg/guihome7.png differ
diff --git a/public/react/src/modules/courses/ListPageIndex.js b/public/react/src/modules/courses/ListPageIndex.js
index 20718c903..3721a081e 100644
--- a/public/react/src/modules/courses/ListPageIndex.js
+++ b/public/react/src/modules/courses/ListPageIndex.js
@@ -69,19 +69,33 @@ class ListPageIndex extends Component{
super(props);
this.state={
yslGuideone:undefined,
- mysearch:undefined,
}
}
componentDidMount(){
- var yslGuideone = window.sessionStorage.getItem('yslGuideone');
console.log("77");
+ var yslGuideone = window.localStorage.getItem('yslGuideone');
+ console.log("78");
console.log(yslGuideone);
- var mysearchs= this.props.location.search===""?undefined:this.props.location.search===undefined?undefined:this.props.location.search==="?exhibition=true"?true:undefined;
- this.setState({
- yslGuideone:yslGuideone,
- mysearch:mysearchs,
- })
+ try {
+ if (yslGuideone === "true") {
+ console.log("true 字符串");
+ this.setState({
+ yslGuideone:true,
+ })
+ } else {
+ this.setState({
+ yslGuideone:false,
+ });
+ console.log("false 字符串");
+ }
+ }catch (e) {
+ console.log(e);
+ this.setState({
+ yslGuideone:false,
+ });
+ }
+
}
//
@@ -93,20 +107,33 @@ class ListPageIndex extends Component{
// })
// }
componentWillUnmount(){
- window.sessionStorage.setItem('yslGuideone', false);
+ // window.localStorage.setItem('yslGuideone', "false");
}
setwindowlocal=(bool)=>{
- window.sessionStorage.setItem('yslGuideone', bool);
- this.setState({
- yslGuideone:bool,
- mysearch:undefined,
- });
- var currenturl = this.props.location.pathname;
- var newUrl = (currenturl.split("?"))[0];
- window.history.pushState('','',newUrl);
+ window.localStorage.setItem('yslGuideone', bool);
+ try {
+ if (bool === "true") {
+ console.log("115");
+ console.log("true 字符串");
+ this.setState({
+ yslGuideone:true,
+ })
+ } else {
+ this.setState({
+ yslGuideone:false,
+ });
+ console.log("124");
+ console.log("false 字符串");
+ }
+ }catch (e) {
+ console.log(e);
+ this.setState({
+ yslGuideone:false,
+ });
+ }
}
render() {
- let {yslGuideone,mysearch} =this.state;
+ let {yslGuideone} =this.state;
// console.log("98");
// console.log(yslGuideone);
// console.log(this.props.isAdmin());
@@ -118,10 +145,10 @@ class ListPageIndex extends Component{
{/*头部banner*/}
-
- {/*{mysearch!==undefined?*/}
+ {/*下面是指引哦*/}
+ {/*{yslGuideone!==undefined?*/}
{/*(*/}
- {/* mysearch===true?*/}
+ {/* yslGuideone===true?*/}
{/*
this.setwindowlocal(b)}*/}
{/* >*/}
diff --git a/public/react/src/modules/courses/Resource/Fileslistitem.js b/public/react/src/modules/courses/Resource/Fileslistitem.js
index c3998700f..f0aec7f64 100644
--- a/public/react/src/modules/courses/Resource/Fileslistitem.js
+++ b/public/react/src/modules/courses/Resource/Fileslistitem.js
@@ -261,9 +261,9 @@ class Fileslistitem extends Component{
}
-
+
- {discussMessage.author.login}
+ {discussMessage.author.name}
大小 {discussMessage.filesize}
下载 {discussMessage.downloads_count}
引用 {discussMessage.quotes}
@@ -302,7 +302,7 @@ class Fileslistitem extends Component{
-
+
资源描述 :{discussMessage.description===null?"暂无描述":discussMessage.description}
{/**/}
{/*/!**!/*/}
diff --git a/public/react/src/modules/courses/boards/BoardsNew.js b/public/react/src/modules/courses/boards/BoardsNew.js
index cea4f47aa..43be980ed 100644
--- a/public/react/src/modules/courses/boards/BoardsNew.js
+++ b/public/react/src/modules/courses/boards/BoardsNew.js
@@ -310,7 +310,7 @@ class BoardsNew extends Component{
{this.isEdit ? "编辑" : "新建"}帖子
this.props.history.goBack()}>
- 返回
+ {/*返回*/}
{/* notRequired */}
diff --git a/public/react/src/modules/courses/busyWork/CommonWorkPost.js b/public/react/src/modules/courses/busyWork/CommonWorkPost.js
index 7f4020590..c248c554c 100644
--- a/public/react/src/modules/courses/busyWork/CommonWorkPost.js
+++ b/public/react/src/modules/courses/busyWork/CommonWorkPost.js
@@ -5,6 +5,8 @@ import TPMMDEditor from '../../tpm/challengesnew/TPMMDEditor';
import { WordsBtn, getUploadActionUrl, appendFileSizeToUploadFile, appendFileSizeToUploadFileAll } from 'educoder';
import axios from 'axios';
import Modals from '../../modals/Modals';
+import _ from 'lodash'
+
const Search = Input.Search;
const CheckboxGroup = Checkbox.Group;
@@ -67,15 +69,19 @@ class CommonWorkPost extends Component{
status: 'done'
}
})
+ const _memebers = response.data.members.slice(0);
+ this._edit_init_memebers = _memebers
+ delete response.data.members;
this.setState({
...response.data,
- selectmemberslist: response.data.members || [],
+ selectmemberslist: _memebers || [],
// members: [],
- task_status: response.data.members ? response.data.members.map(item => item.user_id) : [],
+ task_status: [], //_memebers ? _memebers.map(item => item.user_id) : [],
fileList: _fileList,
memberNumMin: response.data.min_num,
memberNumMax: response.data.max_num,
})
+ this.mine = _memebers.length ? _memebers[0] : null
// 分组
// this.setState({
// task_status:checkedValues,
@@ -99,6 +105,11 @@ class CommonWorkPost extends Component{
group_name: response.data.group_name,
}
+ this.mine = mine
+ // const _memebers = response.data.members.slice(0);
+ if (response.data.members) {
+ delete response.data.members;
+ }
this.setState({
...response.data,
selectmemberslist: [mine],
@@ -157,7 +168,7 @@ class CommonWorkPost extends Component{
}
if(isGroup){
if(userids!=undefined){
- if(userids.length + 1memberNumMax){
+ }else if(userids.length > memberNumMax){
this.setState({
minvalue: memberNumMax,
setvalue:"大于",
@@ -424,30 +435,53 @@ class CommonWorkPost extends Component{
}
funtaskstatus=(checkedValues)=>{
- let{members}=this.state;
- let newlist =members.concat(this.state.selectmemberslist);
- let newcheckedValues=checkedValues;
- let selects=[];
- // const selectobjct = this._findByUserId(check)
- // selects.push(selectobjct)
- for(var z=0; z this.state.task_status.length 是新增; 反之是删除
+ 比较找到不同的id
+ 去除重复的,checkedValues留下的是新增,task_status留下的是删除
+ */
+
+ const _checkedValues = checkedValues.slice(0)
+ const _task_status = this.state.task_status.slice(0);
+ checkedValues.forEach(item => {
+ this.state.task_status.forEach(_item => {
+ if (item == _item) {
+ _.remove(_checkedValues, (item)=> item == _item)
+ _.remove(_task_status, (item)=> item == _item)
}
- }
-
- }
+ })
+ })
+ let _selectmemberslist = this.state.selectmemberslist.slice(0)
+ if (_checkedValues.length) { // 新增
+ _selectmemberslist.push( this.state.members.filter(item => item.user_id == _checkedValues[0])[0])
+ } else if (_task_status.length) { // 删除
+ _.remove(_selectmemberslist, (item)=> item.user_id == _task_status[0])
+ }
+
+
+ // let{members}=this.state;
+ // let newlist =members.concat(this.state.selectmemberslist);
+ // let newcheckedValues=checkedValues;
+ // let selects= this.mine ? [this.mine] : [];
+ // // const selectobjct = this._findByUserId(check)
+ // // selects.push(selectobjct)
+ // for(var z=0; z{
+ doDelete = (id) => {
let{selectmemberslist,task_status}=this.state;
let newlist=task_status.slice(0);
let selects=selectmemberslist;
@@ -468,6 +502,52 @@ class CommonWorkPost extends Component{
selectmemberslist:selects
})
}
+ delecttask_status=(id)=>{
+ if (this.isEdit) {
+ let deleteOldMemberIndex = -1;
+
+ if (this._edit_init_memebers && this._edit_init_memebers.length) {
+ this._edit_init_memebers.some((item, index) => {
+ if (item.user_id == id) {
+ deleteOldMemberIndex = index;
+ return true
+ }
+ })
+ if (deleteOldMemberIndex == -1) {
+ this.doDelete(id)
+ return;
+ } else {
+
+ }
+ }
+
+ this.props.confirm({
+ content: ,
+ onOk: () => {
+ let workId=this.props.match.params.workId;
+ const url = `/homework_commons/${workId}/student_works/delete_work.json`;
+ axios.delete(url, { data: {
+ user_id: id
+ }})
+ .then((response) => {
+ if (response.data.status == 0) {
+ this.searchValue()
+ this.doDelete(id)
+ deleteOldMemberIndex != -1 && this._edit_init_memebers.splice(deleteOldMemberIndex, 1)
+ }
+ })
+ .catch(function (error) {
+ console.log(error);
+ });
+ }
+ })
+ } else {
+ this.doDelete(id)
+ }
+ }
gocannel=()=>{
this.props.history.goBack()
diff --git a/public/react/src/modules/courses/coursesDetail/CoursesBanner.js b/public/react/src/modules/courses/coursesDetail/CoursesBanner.js
index dfdc6291a..c2cc6472d 100644
--- a/public/react/src/modules/courses/coursesDetail/CoursesBanner.js
+++ b/public/react/src/modules/courses/coursesDetail/CoursesBanner.js
@@ -248,30 +248,16 @@ class CoursesBanner extends Component {
axios.post(url).then((response) => {
if(response!==undefined){
window.location.href = "/courses/" + response.data.new_course_id+"/students";
- }else {
- this.modalCancel();
+ return
}
+ this.modalCancel();
// window.location.href = "/courses/" + response.data.new_course_id;
- }).catch(function (error) {
+ }).catch( (error)=> {
this.modalCancel();
console.log(252);
console.log(error);
});
-
- // axios.interceptors.response.use((response) => {
- // if (response != undefined)
- // if (response && response.data.status === -1) {
- // this.setState({
- // antIcon: false,
- // })
- //
- // }
- // return response;
- // }, (error) => {
- // //TODO 这里如果样式变了会出现css不加载的情况
- //
- // });
}
if(this.state.metype===6){
diff --git a/public/react/src/modules/courses/coursesDetail/CoursesLeftNav.js b/public/react/src/modules/courses/coursesDetail/CoursesLeftNav.js
index 849621259..cb911c4dc 100644
--- a/public/react/src/modules/courses/coursesDetail/CoursesLeftNav.js
+++ b/public/react/src/modules/courses/coursesDetail/CoursesLeftNav.js
@@ -683,7 +683,7 @@ class Coursesleftnav extends Component{
}else if(result.source.droppableId==="course_group"){
let url ="/course_groups/"+result.draggableId+"/move_category.json"
- this.droppablepost(url,result.destination.index)
+ this.droppablepost(url,result.destination.index+1)
}
@@ -837,7 +837,7 @@ class Coursesleftnav extends Component{
.droppableul{
max-height: 500px;
overflow-y:auto;
- overflow:hidden auto;
+ overflow-x:hidden;
}
.mr13{
@@ -928,8 +928,9 @@ class Coursesleftnav extends Component{
{iem.category_name}
- {iem.category_count===0?"":iem.category_count}
+ {iem.category_count===0?"":iem.category_count}
{item.type===twosandiantypes&&twosandiantype===index?
+ iem.category_name==="未分班"?"":
iem.category_type==="graduation_topics"||iem.category_type==="graduation_tasks"?
{iem.category_count===0?"":iem.category_count}
:
diff --git a/public/react/src/modules/courses/exercise/ExerciseReviewAndAnswer.js b/public/react/src/modules/courses/exercise/ExerciseReviewAndAnswer.js
index c2c9b7bcf..91ca19e7d 100644
--- a/public/react/src/modules/courses/exercise/ExerciseReviewAndAnswer.js
+++ b/public/react/src/modules/courses/exercise/ExerciseReviewAndAnswer.js
@@ -336,6 +336,16 @@ class ExerciseReviewAndAnswer extends Component{
}
+ // 选择题,切换答案
+ changeOption = (index,ids) =>{
+ //console.log(index+" "+ids);
+ this.setState(
+ (prevState) => ({
+ exercise_questions : update(prevState.exercise_questions, {[index]: { user_answer: {$set: ids} }}),
+ })
+ )
+ }
+
//简答题 显示和隐藏答案
changeA_flag=(index,status)=>{
this.setState(
@@ -726,6 +736,7 @@ class ExerciseReviewAndAnswer extends Component{
exercise={exercise}
questionType={item}
user_exercise_status={user_exercise_status}
+ changeOption={(index,ids)=>this.changeOption(index,ids)}
changeQuestionStatus={(No,flag)=>this.changeQuestionStatus(No,flag)}
index={key}
>
@@ -739,6 +750,7 @@ class ExerciseReviewAndAnswer extends Component{
exercise={exercise}
questionType={item}
user_exercise_status={user_exercise_status}
+ changeOption={(index,ids)=>this.changeOption(index,ids)}
changeQuestionStatus={(No,flag)=>this.changeQuestionStatus(No,flag)}
index={key}
diff --git a/public/react/src/modules/courses/exercise/Testpapersettinghomepage.js b/public/react/src/modules/courses/exercise/Testpapersettinghomepage.js
index bcc0d85a3..65e48962a 100644
--- a/public/react/src/modules/courses/exercise/Testpapersettinghomepage.js
+++ b/public/react/src/modules/courses/exercise/Testpapersettinghomepage.js
@@ -163,6 +163,10 @@ class Testpapersettinghomepage extends Component{
}
}
+ //打开pdf
+ confpdf = (url) =>{
+ window.open(url);
+ }
/// 确认是否下载
confirmysl(url,child){
let params ={}
@@ -372,7 +376,7 @@ class Testpapersettinghomepage extends Component{
导出
:""}
diff --git a/public/react/src/modules/courses/exercise/question/multiple.js b/public/react/src/modules/courses/exercise/question/multiple.js
index 7e96f8550..bbbfa0c94 100644
--- a/public/react/src/modules/courses/exercise/question/multiple.js
+++ b/public/react/src/modules/courses/exercise/question/multiple.js
@@ -15,6 +15,7 @@ class Multiple extends Component{
saveId=(value)=>{
let question_id=this.props.questionType.question_id;
let url=`/exercise_questions/${question_id}/exercise_answers.json`;
+ let {index}=this.props;
axios.post((url),{
exercise_choice_id:value
}).then((result)=>{
@@ -25,6 +26,7 @@ class Multiple extends Component{
}else{
k=0;
}
+ this.props.changeOption && this.props.changeOption(index,value);
this.props.changeQuestionStatus && this.props.changeQuestionStatus(parseInt(this.props.questionType.q_position)-1,k);
}
}).catch((error)=>{
@@ -42,14 +44,14 @@ class Multiple extends Component{
console.log(questionType);
return(
-
+
{
questionType.question_choices && questionType.question_choices.map((item,key)=>{
let prefix = `${tagArray[key]}.`
return(
- {prefix}
+ {prefix}
{/* */}
{/* */}
{
let choiceId=e.target.value;
let question_id=this.props.questionType.question_id;
+ let {index}=this.props;
let url=`/exercise_questions/${question_id}/exercise_answers.json`;
axios.post((url),{
exercise_choice_id:choiceId
}).then((result)=>{
if(result){
+ this.props.changeOption && this.props.changeOption(index,[choiceId]);
this.props.changeQuestionStatus && this.props.changeQuestionStatus(parseInt(this.props.questionType.q_position)-1,1);
}
}).catch((error)=>{
@@ -38,12 +40,12 @@ class single extends Component{
let isJudge = questionType.question_type == 2
return(
-
+
{
questionType.question_choices && questionType.question_choices.map((item,key)=>{
let prefix = isJudge ? undefined : `${tagArray[key]}.`
return(
-
+
{prefix}
{/* */}
{/* */}
diff --git a/public/react/src/modules/courses/graduation/tasks/GraduateTaskItem.js b/public/react/src/modules/courses/graduation/tasks/GraduateTaskItem.js
index cf66b918a..d30944ef0 100644
--- a/public/react/src/modules/courses/graduation/tasks/GraduateTaskItem.js
+++ b/public/react/src/modules/courses/graduation/tasks/GraduateTaskItem.js
@@ -283,11 +283,11 @@ class GraduateTaskItem extends Component{
{this.props.isAdmin?
diff --git a/public/react/src/modules/courses/graduation/tasks/GraduationTasksSubmitnew.js b/public/react/src/modules/courses/graduation/tasks/GraduationTasksSubmitnew.js
index f5060ad4c..dadc621b2 100644
--- a/public/react/src/modules/courses/graduation/tasks/GraduationTasksSubmitnew.js
+++ b/public/react/src/modules/courses/graduation/tasks/GraduationTasksSubmitnew.js
@@ -439,10 +439,24 @@ class GraduationTasksSubmitnew extends Component{
).then((response) => {
this.setState({
spinnings:false
- })
- if(response!==undefined){
- this.goback()
+ });
+ // /courses/2915/graduation_tasks/1301/appraise
+ // window.location.href
+ if(response){
+ if(response.data){
+ if(response.data.work_id){
+ window.location.href=`/courses/${this.props.match.params.coursesId}/graduation_tasks/${response.data.work_id}/appraise`
+ }
+ }
}
+ // console.log(this.props);
+ // console.log(response);
+
+ // 新需求
+ // https://www.trustie.net/issues/23015
+ // if(response!==undefined){
+ // this.goback()
+ // }
// if(response.status===200) {
// GraduationTasksnewtype=false;
// if(response.data.status===0){
@@ -458,6 +472,9 @@ class GraduationTasksSubmitnew extends Component{
// }
// }
}).catch((error) => {
+ this.setState({
+ spinnings:false
+ });
console.log(error)
})
diff --git a/public/react/src/modules/courses/graduation/tasks/index.js b/public/react/src/modules/courses/graduation/tasks/index.js
index 80dceb562..b54815b2f 100644
--- a/public/react/src/modules/courses/graduation/tasks/index.js
+++ b/public/react/src/modules/courses/graduation/tasks/index.js
@@ -179,8 +179,13 @@ class GraduationTasks extends Component{
})
.then((result)=>{
if(result.data.status==0){
+ this.setState({
+ checkBoxValues:[],
+ checkAllValue:false
+ })
+ this.fetchAll(search,page,order,15)
this.props.showNotification(`${result.data.message}`);
- this.fetchAll(search,page,order,15)
+
}
}).catch((error)=>{
console.log(error);
@@ -554,9 +559,10 @@ class GraduationTasks extends Component{
}
// 题库选用成功后刷新页面
useBankSuccess=(checkBoxValues,object_ids)=>{
- // debugger
+ //debugger
let {search,page,order,all_count} = this.state;
this.fetchAll(search,page,order,all_count)
+
}
getcourse_groupslist=(id)=>{
this.setState({
@@ -651,7 +657,7 @@ class GraduationTasks extends Component{
: ""}
- {this.props.isAdmin() ?this.useBankSuccess=(checkBoxValues,object_ids)}>:""}
+ {this.props.isAdmin() ?this.useBankSuccess(checkBoxValues,object_ids)}>:""}
}
diff --git a/public/react/src/modules/courses/graduation/topics/index.js b/public/react/src/modules/courses/graduation/topics/index.js
index 6587ed0c6..61a9bea67 100644
--- a/public/react/src/modules/courses/graduation/topics/index.js
+++ b/public/react/src/modules/courses/graduation/topics/index.js
@@ -355,6 +355,13 @@ onBoardsNew=()=>{
DownloadMessageval:undefined
})
}
+
+ // 题库选用成功后刷新页面
+ useBankSuccess=(checkBoxValues,object_ids)=>{
+ //debugger
+ let {searchValue,page,status} =this.state
+ this.fetchAll(searchValue,page,status);
+ }
render(){
let {
searchValue,
diff --git a/public/react/src/modules/courses/members/studentsList.js b/public/react/src/modules/courses/members/studentsList.js
index c3dc2c6ab..2a510789e 100644
--- a/public/react/src/modules/courses/members/studentsList.js
+++ b/public/react/src/modules/courses/members/studentsList.js
@@ -218,9 +218,9 @@ class studentsList extends Component{
})
this.fetchAll()
const isAdmin = this.props.isAdmin()
- if (isAdmin) {
- this.fetchCourseGroups()
- }
+ // if (isAdmin) {
+ this.fetchCourseGroups();
+ // }
isAdmin && on('addStudentSuccess', this.addStudentSuccessListener)
isAdmin && on('updateNavSuccess', this.updateNavSuccess)
diff --git a/public/react/src/modules/courses/new/CoursesNew.js b/public/react/src/modules/courses/new/CoursesNew.js
index 7dcc9bce7..8629ba944 100644
--- a/public/react/src/modules/courses/new/CoursesNew.js
+++ b/public/react/src/modules/courses/new/CoursesNew.js
@@ -41,7 +41,8 @@ class CoursesNew extends Component {
searchlist: [],
searchlistscholl:[],
listvalue: undefined,
- fetching:false
+ fetching:false,
+ boolxinjian:false,
}
}
@@ -80,6 +81,9 @@ class CoursesNew extends Component {
}).catch((error) => {
console.log(error);
})
+ this.setState({
+ boolxinjian:false,
+ });
}else{
let url = "/courses/new.json"
axios.get(url).then((result) => {
@@ -96,18 +100,25 @@ class CoursesNew extends Component {
});
this.handleSearchschool(user_school);
-
+ this.setState({
+ boolxinjian:true,
+ });
}
}
- componentDidUpdate(prevProps){
- // if(prevProps.current_user!=this.props.current_user){
- // if(this.props.current_user.user_identity==="学生"){
- // window.location.href ="/403"
- // }
- // }
- }
+ componentDidUpdate(prevProps) {
+ if(prevProps.current_user !== this.props.current_user){
+ let user_school=this.props.current_user&&this.props.current_user.user_school;
+ this.props.form.setFieldsValue({
+ school:user_school,
+ });
+ this.setState({
+ school:user_school,
+ });
+ this.handleSearchschool(user_school);
+ }
+ }
onChangeTimepublishs = (date, dateString) => {
if(dateString===""){
this.setState({
@@ -206,8 +217,23 @@ class CoursesNew extends Component {
if (response.data.status === 0) {
// this.goback()
- window.location.href=first_category_url+"?exhibition=true";
- window.sessionStorage.setItem('yslGuideone', true);
+ window.location.href=first_category_url;
+ if(this.state.boolxinjian===true) {
+ var yslGuideone = window.localStorage.getItem('yslGuideone');
+ try {
+ if (yslGuideone === null) {
+ window.localStorage.setItem('yslGuideone', "true");
+ return
+ }
+ if (yslGuideone === undefined) {
+ window.localStorage.setItem('yslGuideone', "true");
+ return
+ }
+ } catch (e) {
+
+ }
+ }
+
}
}).catch((error) => {
console.log(error)
@@ -251,8 +277,24 @@ class CoursesNew extends Component {
).then((response) => {
if (response.status === 200) {
// this.goback
- window.location.href=response.data.first_category_url+"?exhibition=true";
- window.sessionStorage.setItem('yslGuideone', true);
+ window.location.href=response.data.first_category_url;
+ if(this.state.boolxinjian===true){
+ var yslGuideone = window.localStorage.getItem('yslGuideone');
+ try {
+ if(yslGuideone=== null){
+ window.localStorage.setItem('yslGuideone', "true");
+ return
+ }
+ if(yslGuideone=== undefined){
+ window.localStorage.setItem('yslGuideone', "true");
+ return
+ }
+ }catch (e) {
+
+ }
+
+ }
+
}
}).catch((error) => {
console.log(error)
@@ -405,9 +447,10 @@ class CoursesNew extends Component {
const propsWithoutForm = Object.assign({}, this.props)
delete propsWithoutForm.form
const options = this.state.searchlist && this.state.searchlist.map(d => );
- const optionschool = this.state.searchlistscholl&&this.state.searchlistscholl.map(z => );
+ const optionschool = this.state.searchlistscholl===undefined?"":this.state.searchlistscholl===null?"":this.state.searchlistscholl==="[]"?"":this.state.searchlistscholl.map(z => );
// console.log(this.props.current_user.user_school)
// form合并了
+ console.log("获取到的数据");
console.log(this.state);
console.log(this.props);
console.log(this.props.current_user);
diff --git a/public/react/src/modules/courses/shixunHomework/Guide.js b/public/react/src/modules/courses/shixunHomework/Guide.js
index d93961518..6be0ce3a5 100644
--- a/public/react/src/modules/courses/shixunHomework/Guide.js
+++ b/public/react/src/modules/courses/shixunHomework/Guide.js
@@ -6,7 +6,9 @@ import guihome2 from "../../../images/guideimg/guihome2.jpg";
import guihome3 from "../../../images/guideimg/guihome3.jpg";
import guihome4 from "../../../images/guideimg/guihome4.jpg";
import guihome5 from "../../../images/guideimg/guihome5.jpg";
-import guihome6 from "../../../images/guideimg/guihome6.jpg";
+ import guihome6 from "../../../images/guideimg/guihome6.jpg";
+// import guihome6 from "../../../images/guideimg/guihome6.png";
+// import guihome7 from "../../../images/guideimg/guihome7.png";
class Guide extends Component {
@@ -60,7 +62,7 @@ class Guide extends Component {
page:i,
})
if(i===7){
- this.props.setwindowlocal(false);
+ this.props.setwindowlocal("false");
}
}
render() {
@@ -123,6 +125,7 @@ class Guide extends Component {
page===6?

this.thissetPage(7)}/>
+ {/*

this.thissetPage(7)}/>*/}
:
""
diff --git a/public/react/src/modules/courses/shixunHomework/Listofworksstudentone.js b/public/react/src/modules/courses/shixunHomework/Listofworksstudentone.js
index 7f821bde4..8ba9b8ac2 100644
--- a/public/react/src/modules/courses/shixunHomework/Listofworksstudentone.js
+++ b/public/react/src/modules/courses/shixunHomework/Listofworksstudentone.js
@@ -369,7 +369,7 @@ class Listofworksstudentone extends Component {
{
record.submitstate === "未提交" ?--
:
- this.Viewstudenttraininginformation(record)}>{record.operating}
}
@@ -693,7 +693,7 @@ class Listofworksstudentone extends Component {
render: (text, record) => (
record.submitstate === "未提交" ? -- :
- this.Viewstudenttraininginformationt(record)}>{record.operating}
)
@@ -987,7 +987,7 @@ class Listofworksstudentone extends Component {
render: (text, record) => (
record.submitstate === "未提交" ? -- :
- this.Viewstudenttraininginformationt(record)}>{record.operating}
)
diff --git a/public/react/src/modules/courses/shixunHomework/ShixunStudentWork.js b/public/react/src/modules/courses/shixunHomework/ShixunStudentWork.js
index bb5ff3577..fb8721f9d 100644
--- a/public/react/src/modules/courses/shixunHomework/ShixunStudentWork.js
+++ b/public/react/src/modules/courses/shixunHomework/ShixunStudentWork.js
@@ -157,6 +157,7 @@ class ShixunStudentWork extends Component {
lunxun:false,
duplicatechecking:false,
});
+ return;
}
}
}
@@ -177,6 +178,9 @@ class ShixunStudentWork extends Component {
description: response.data.message
});
}
+ this.setState({
+ lunxun:true,
+ })
setInterval(() => {
console.log("开始轮询了");
if(this.state.lunxun===true){
diff --git a/public/react/src/modules/courses/shixunHomework/guide.css b/public/react/src/modules/courses/shixunHomework/guide.css
index e571884a8..cd7ec9b0b 100755
--- a/public/react/src/modules/courses/shixunHomework/guide.css
+++ b/public/react/src/modules/courses/shixunHomework/guide.css
@@ -470,4 +470,49 @@
margin-left: 27%;
margin-right: 0;
height: 40%;
+}
+
+
+
+
+
+.ysldiv71900{
+ margin-top: 16%;
+ margin-left: 34%;
+ margin-right: 19%
+
+}
+.ysldiv71680{
+ margin-top: 18%;
+ margin-left: 31%;
+ margin-right: 14%;
+}
+.ysldiv71600{
+ margin-top: 19%;
+ margin-left: 30%;
+ margin-right: 12%;
+}
+.ysldiv71440{
+ margin-top: 21%;
+ margin-left: 28%;
+ margin-right: 8%;
+}
+
+.ysldiv71280{
+ margin-top: 24%;
+ margin-left: 25%;
+ margin-right: 3%;
+ height: 53%;
+}
+.ysldiv71366{
+ margin-top: 22%;
+ margin-left: 26%;
+ margin-right: 6%;
+ height: 53%;
+}
+.ysldiv71024{
+ margin-top: 31%;
+ margin-left: 27%;
+ margin-right: 0;
+ height: 40%;
}
\ No newline at end of file
diff --git a/public/react/src/modules/courses/shixunHomework/shixunHomework.js b/public/react/src/modules/courses/shixunHomework/shixunHomework.js
index 48c988114..e168dcf6e 100644
--- a/public/react/src/modules/courses/shixunHomework/shixunHomework.js
+++ b/public/react/src/modules/courses/shixunHomework/shixunHomework.js
@@ -686,6 +686,7 @@ class ShixunHomework extends Component{
ModalSave:this.cancelmodel,
Loadtype:false,
checkBoxValues:[],
+ checkedtype:false,
})
this.props.showNotification(response.data.message)
this.homeworkupdatalist(Coursename,page,order);
@@ -1018,8 +1019,9 @@ class ShixunHomework extends Component{
- {datas&&datas.category_name===undefined||datas&&datas.category_name===null?datas&&datas.main_category_name:datas&&datas.category_name+" 作业列表"}
-
+ {/*{datas&&datas.category_name===undefined||datas&&datas.category_name===null?datas&&datas.main_category_name:datas&&datas.category_name+" 作业列表"}*/}
+ 实训作业
+
{this.props.isAdmin()===true?datas&&datas.category_name===undefined||datas&&datas.category_name===null?
this.addDir()} className={"mr30 font-16"}>添加目录
diff --git a/public/react/src/modules/courses/shixunHomework/shixunreport/Shixunechart.js b/public/react/src/modules/courses/shixunHomework/shixunreport/Shixunechart.js
index d19835f3b..2deffd5c5 100644
--- a/public/react/src/modules/courses/shixunHomework/shixunreport/Shixunechart.js
+++ b/public/react/src/modules/courses/shixunHomework/shixunreport/Shixunechart.js
@@ -370,7 +370,7 @@ class Shixunechart extends Component {
{data&&data.username}
- {data!==undefined?"无":data.student_id===undefined?"无":data.student_id===null?"无":data.student_id}
+ {data!==undefined?"--":data.student_id===undefined?"--":data.student_id===null?"--":data.student_id}
{data&&data.echart_data===undefined?"":data&&data.echart_data.myself_eff[1]}
{data&&data.echart_data===undefined?"":data&&data.echart_data.myself_eff[0]}
@@ -396,7 +396,7 @@ class Shixunechart extends Component {
{data&&data.username}
- {data!==undefined?"无":data.student_id===undefined?"无":data.student_id===null?"无":data.student_id}
+ {data!==undefined?"--":data.student_id===undefined?"--":data.student_id===null?"--":data.student_id}
{data&&data.echart_data===undefined?"":data&&data.echart_data.myself_object[1]}
diff --git a/public/react/src/modules/paths/PathDetail/PathDetailIndex.js b/public/react/src/modules/paths/PathDetail/PathDetailIndex.js
index fd45f13e6..53eb566e6 100644
--- a/public/react/src/modules/paths/PathDetail/PathDetailIndex.js
+++ b/public/react/src/modules/paths/PathDetail/PathDetailIndex.js
@@ -500,8 +500,8 @@ class PathDetailIndex extends Component{
{
detailInfoList===undefined?"":detailInfoList.allow_add_member===true?
-
-
+ {key!=0?
:""}
+ {key+1!=detailInfoList.members.length?
:""}
:""
}
diff --git a/public/react/src/modules/tpm/NewHeader.js b/public/react/src/modules/tpm/NewHeader.js
index b816448e0..a6a849183 100644
--- a/public/react/src/modules/tpm/NewHeader.js
+++ b/public/react/src/modules/tpm/NewHeader.js
@@ -826,6 +826,9 @@ submittojoinclass=(value)=>{
{/* p 老师 l 学生 */}
我的实训
我的实践课程
+
+ 客户管理
+
我的项目
我的众包
账号管理
diff --git a/public/react/src/modules/tpm/TPMIndexHOC.js b/public/react/src/modules/tpm/TPMIndexHOC.js
index b18b2b1c7..f87f128a1 100644
--- a/public/react/src/modules/tpm/TPMIndexHOC.js
+++ b/public/react/src/modules/tpm/TPMIndexHOC.js
@@ -362,6 +362,7 @@ export function TPMIndexHOC(WrappedComponent) {
overflow: hidden;
}
.newHeaders{
+ // position: fixed;
max-width: unset;
background: #24292D !important;
width: 100%;
diff --git a/public/react/src/modules/tpm/shixunchild/Collaborators/Collaborators.js b/public/react/src/modules/tpm/shixunchild/Collaborators/Collaborators.js
index c98fd6d3e..1662635ba 100644
--- a/public/react/src/modules/tpm/shixunchild/Collaborators/Collaborators.js
+++ b/public/react/src/modules/tpm/shixunchild/Collaborators/Collaborators.js
@@ -113,7 +113,7 @@ class Collaborators extends Component {
onSearchcalue:""
})
let admintype = this.props.identity;
- if (admintype>3) {
+ if (admintype>4) {
this.props.showSnackbar("您没有权限");
return
}
@@ -329,6 +329,10 @@ class Collaborators extends Component {
let id = this.props.match.params.shixunId;
let url = "/shixuns/" + id + "/collaborators_delete.json?user_id=" + collaborators_deletevalue;
axios.delete(url).then((response) => {
+ if (this.props.current_user.user_id == collaborators_deletevalue) {
+ this.props.history.push('/shixuns')
+ return;
+ }
this.props.showSnackbar(response.data.message);
this.updatacomponentDiddata();
this.setState({
diff --git a/public/react/src/search/SearchPage.js b/public/react/src/search/SearchPage.js
index 33a1a7852..e5cc07b2b 100644
--- a/public/react/src/search/SearchPage.js
+++ b/public/react/src/search/SearchPage.js
@@ -183,7 +183,7 @@ class SearchPage extends Component{
return (
diff --git a/public/stylesheets/css/edu-common.css b/public/stylesheets/css/edu-common.css
index f19e3b8da..14b7de1d6 100644
--- a/public/stylesheets/css/edu-common.css
+++ b/public/stylesheets/css/edu-common.css
@@ -1,613 +1,613 @@
-@charset "utf-8";
-body{font-size:14px; line-height:2.0;background:#ffffff!important;font-family: "微软雅黑","宋体"; color:#333;height: 100%}
-html{height:100%;}
-.newContainer{ min-height:100%; height: auto !important; height: 100%; /*IE6不识别min-height*/position: relative;}
-.newMain{ margin: 0 auto; padding-bottom: 155px; min-width:1200px }
-.newFooter{ position: absolute; bottom: 0; width: 100%; height: 155px;background: #323232; clear:both; min-width: 1200px;z-index:99999;left: 0px;}
-/* 重置样式 */
-body,h1,h2,h3,h4,h5,h6,hr,p,blockquote,dl,dt,dd,ul,ol,li,pre,form,fieldset,legend,button,input,textarea,th,td,span{ margin:0; padding:0;}
-table,input,textarea,select,button { font-family: "微软雅黑","宋体"; font-size:14px;line-height:1.9; background:#f5f5f5; color:#333;}
-div,img,tr,td,table{ border:0;}
-table,tr,td{border:0;}
-ol,ul,li{ list-style-type:none}
-a:link,a:visited{text-decoration:none;color:#898989; }
-a:hover {color:#FF7500;}
-a:hover.fa{color:#FF7500;}
-
-input,textarea,select{ background: #fff; border:1px solid #eee;}
-textarea{resize: none;}
-/*侧滚动条*/
-::-webkit-scrollbar { width:10px; height:10px; background-color: #F5F5F5; }
-::-webkit-scrollbar-track { -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3); background-color: #F5F5F5; }
-::-webkit-scrollbar-thumb { -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,.3); background-color: #ccc; }
-/*万能清除浮动*/
-.clearfix:after{clear:both;content:".";display:block;font-size:0;height:0;line-height:0;visibility:hidden;}
-.clearfix{clear:both;zoom:1}
-.cl{ clear: both; overflow: hidden;}
-/*通用浮动*/
-.fl{ float: left;}
-.fr{ float: right;}
-/*pre标签换行*/
-.break-word{word-break: break-all;word-wrap: break-word;white-space: pre-wrap;}
-.break-word-firefox{white-space: pre-wrap !important;word-break: break-all;}
-/*超过隐藏*/
-.task-hide{overflow:hidden; white-space: nowrap; text-overflow:ellipsis;}
-.task-hide2{overflow:-moz-hidden-unscrollable; white-space: nowrap; text-overflow:ellipsis;}
-.hide{overflow:hidden; white-space: nowrap; text-overflow:ellipsis;}
-.hide-text {overflow:hidden; white-space:nowrap;}
-/*隐藏*/
-.none{display: none}
-.block{ display:block;}
-/*通用文字功能样式*/
-.font-bd{ font-weight: bold;}
-.color-red-light{color: #F00!important;}
-.color-red{ color:#d2322d!important;}
-.u-color-light-red{color: #FF6666}
-.color-black{color:#333!important;}
-.color-green{color:#51a74f!important;}
-.color-light-green{color:#29bd8b!important;}
-.color-blue{color:#3498db!important;}
-.color-orange{color:#ee4a1f!important;}
-.color-orange02{color:#f79f88!important;}
-.color-orange03{color:#ff7500!important;}
-.color-orange04{color: #ee4a20!important;}/*温馨提示公用颜色*/
-.color-orange05{color: #4CACFF!important;}
-.color-orange06{color: #ff6530!important;}
-a.color-orange05:hover,i.color-orange05:hover{color:#ff7500!important;}
-.color-orange06{color:#FF6610!important;}
-.color-yellow{color:#f0ad4e!important;}
-.color-yellow2{color:#ff9933!important;}
-.color-yellow3{color:#FFC828;}/*新版学员统计---通关排行榜 2018/01/22*/
-
-.color-light-grey{color:#afafaf!important;}
-.color-grey-7f{color: #7f7f7f!important;}
-.color-grey-no-a{color:#888!important;}
-.color-grey{color:#888!important;}
-.color-grey9{color:#999!important;}
-a.color-grey:hover{color: #FF7500!important;}/*a标签,移入变橙色*/
-.color-dark-grey{color:#666!important;}
-.color-grey3{color:#333!important;}
-a.color-grey3:hover{color: #ff7500!important;}
-.u-color-light-grey{color: #CCCCCC}
-.color-light-grey-C{color: #CCCCCC!important;}
-.color-light-grey-E{color: #EEEEEE}
-.color-grey-bf{color:#bfbfbf!important;}
-.color-grey-bf:hover{color: #FF7500!important;}
-.color-grey-b{color:#bbbbbb!important;}
-
-.-text-danger{ color:#FF6545 }
-.color_white{ color:#fff!important;}
-.color_Purple_grey{color: #8291a3!important;}/*TPI评论里右侧点赞的icon颜色*/
-.color-grey-c{color: #cccccc!important;}
-.color-grey-3{color: #333333 !important;}
-a.link-color-grey{color:#888!important;}
-a:hover.link-color-grey{color:#29bd8b!important;}
-a.link-color-green{color:#29bd8b!important;}
-a.link-color-blue{color:#6a8abe!important;}
-a.link-color-grey02{color:#888!important;}
-a:hover.link-color-grey02{ color:red!important;}
-a.link-color-grey03{color:#888!important;}
-a:hover.link-color-grey03{color:#3498db!important;}
-.edu-color-grey{ color:#666;}
-.edu-color-grey:hover{color:#ff7500;}
-/*通用背景颜色*/
-.back-color-orange{background-color: #FF7500}
-
-
-/*通用文字大小样式*/
-.font-12{ font-size: 12px!important;}
-.font-13{ font-size: 13px!important;}
-.font-14{ font-size: 14px!important;}
-.font-15{ font-size: 15px!important;}
-.font-16{ font-size: 16px!important;}
-.font-17{ font-size: 17px!important;}
-.font-18{ font-size: 18px!important;}
-.font-20{ font-size: 20px!important;}
-.font-22{ font-size: 22px!important;}
-.font-24{ font-size: 24px!important;}
-.font-28{ font-size: 28px!important;}
-.font-30{ font-size: 30px!important;}
-.font-50{ font-size: 50px!important;}
-.font-60{ font-size: 60px!important;}
-.font-70{ font-size: 70px!important;}
-/*通用内外边距*/
-.mt-10{ margin-top:-10px;}.mt1{ margin-top:1px;}.mt2{ margin-top:2px;}.mt3{ margin-top:3px;}.mt4{ margin-top:4px;}.mt5{ margin-top:5px!important;}.mt6{ margin-top:6px;}.mt7{ margin-top:7px!important;}.mt8{ margin-top:8px;}.mt10{ margin-top:10px;}.mt12{ margin-top:12px;}.mt13{ margin-top:13px;}.mt15{ margin-top:15px;}.mt17{ margin-top:17px;}.mt20{ margin-top:20px!important;}.mt25{ margin-top:25px;}.mt30{ margin-top:30px!important;}.mt36{ margin-top:36px!important;}.mt40{ margin-top:40px;}.mt50{ margin-top:50px;}.mt70{ margin-top:70px;}.mt95{ margin-top:95px;}.mt100{ margin-top:100px;}
-.mb5{ margin-bottom: 5px;}.mb7{ margin-bottom: 7px;}.mb10{ margin-bottom: 10px;}.mb11{ margin-bottom: 11px;}.mb15{ margin-bottom: 15px;}.mb20{ margin-bottom: 20px;}.mb25{ margin-bottom: 25px;}.mb30{ margin-bottom: 30px!important;}.mb40{ margin-bottom: 40px!important;}.mb50{ margin-bottom: 50px!important;}.mb60{ margin-bottom: 60px!important;}.mb70{ margin-bottom: 70px!important;}.mb80{ margin-bottom: 80px!important;}.mb90{ margin-bottom: 90px!important;}.mb100{ margin-bottom: 100px!important;}.mb110{ margin-bottom: 110px;}
-.ml-3{ margin-left: -3px;}.ml1{margin-left: 1px;}.ml2{margin-left: 2px;}.ml3{margin-left: 3px;}.ml4{margin-left: 4px;}.ml5{ margin-left: 5px;}.ml6{ margin-left: 6px;}.ml10{ margin-left: 10px;}.ml12{ margin-left:12px!important;}.ml15{ margin-left: 15px;}.ml18{ margin-left: 18px;}.ml20{ margin-left: 20px;}.ml25{ margin-left: 25px;}.ml30{ margin-left: 30px;}.ml33{ margin-left: 33px;}.ml35{ margin-left:35px;}.ml40{margin-left:40px;}.ml42{margin-left:42px;}.ml45{ margin-left: 45px;}.ml50{ margin-left: 50px;}.ml55{ margin-left: 55px;}.ml60{ margin-left: 60px;}.ml75{ margin-left: 75px;}.ml80{ margin-left: 80px;}.ml85{margin-left:85px;}.ml95{ margin-left: 95px;}.ml115{margin-left: 115px}.ml123{ margin-left: 123px;}.ml150{ margin-left: 150px;}.ml180{ margin-left: 180px;}.ml230{ margin-left: 230px;}.ml240{margin-left: 240px;}.ml250{margin-left: 250px;}.ml290{ margin-left: 290px;}
-.mr3{margin-right: 3px}.mr4{margin-right: 4px}.mr5{ margin-right: 5px;}.mr8{ margin-right: 8px;}.mr10{ margin-right: 10px;}.mr12{ margin-right:12px!important;}.mr15{ margin-right: 15px;}.mr18{ margin-right: 18px;}.mr20{ margin-right: 20px;}.mr25{ margin-right: 25px;}.mr30{ margin-right:30px;}.mr35{margin-right:35px;}.mr40{margin-right:40px;}.mr45{margin-right:45px;}.mr50{ margin-right: 50px;}.mr60{ margin-right:60px;}.mr350{ margin-right:350px;}.pt5{ padding-top:5px;}.pt10{ padding-top:10px;}.pt15{ padding-top:15px;}.pt20{ padding-top:20px;}.pt30{ padding-top:30px;}.pt40{ padding-top:40px;}.pt47{ padding-top:47px;}.pt100{padding-top:100px;}.pt130{padding-top:130px;}
-
-.pt1{ padding-top:1px;}.pt5{ padding-top:5px;}.pt10{ padding-top:10px;}.pt15{ padding-top:15px;}.pt20{ padding-top:20px;}.pt30{ padding-top:30px;}.pt40{ padding-top:40px;}
-.pb5{ padding-bottom:5px;}.pb10{ padding-bottom:10px;}.pb15{ padding-bottom:15px;}.pb20{ padding-bottom:20px;}.pb30{ padding-bottom:30px;}.pb40{ padding-bottom:40px;}.pb47{ padding-bottom:47px;}.pb50{ padding-bottom:50px;}.pb155{ padding-bottom:155px;}
-.pl2{ padding-left:2px;}.pl5{ padding-left:5px;}.pl8{ padding-left:8px;}.pl10{ padding-left:10px;}.pl15{ padding-left:15px;}.pl20{ padding-left:20px;}.pl28{ padding-left:28px;}.pl30{ padding-left:30px;}.pl33{padding-left: 33px}.pl40{ padding-left:40px;}.pl42{ padding-left:42px;}.pl45{ padding-left:45px;}.pl50{ padding-left:50px;}.pl100{ padding-left:100px;}.pl35{ padding-left:35px;}.pl50{padding-left:50px;}.pl70{padding-left:70px;}.pl80{padding-left:80px;}.pl92{padding-left:92px;}
-.pr2{ paddding-right:2px;}.pr5{ padding-right:5px;}.pr10{ padding-right:10px;}.pr15{ padding-right:15px;}.pr20{ padding-right:20px!important;}.pr30{ padding-right:30px!important;}.pr42{ padding-right:42px;}.pr45{ padding-right:45px;}
-
-.pl2{ padding-left:2px;}.pl5{ padding-left:5px;}.pl8{ padding-left:8px;}.pl10{ padding-left:10px;}.pl15{ padding-left:15px;}.pl20{ padding-left:20px;}.pl28{ padding-left:28px;}.pl30{ padding-left:30px;}.pl33{padding-left: 33px}.pl40{ padding-left:40px;}.pl42{ padding-left:42px;}.pl45{ padding-left:45px;}.pl50{ padding-left:50px;}.pl100{ padding-left:100px;}.pl35{ padding-left:35px;}.pl50{padding-left:50px;}.pl70{padding-left:70px;}.pl80{padding-left:80px;}.pl92{padding-left:92px;}
-.pr2{ paddding-right:2px;}.pr5{ padding-right:5px;}.pr10{ padding-right:10px;}.pr15{ padding-right:15px;}.pr20{ padding-right:20px!important;}.pr30{ padding-right:30px!important;}.pr42{ padding-right:42px;}.pr45{ padding-right:45px;}
-
-
-.padding15{ padding:15px;}
-.padding10{ padding:10px;}
-.padding10-15{ padding:10px 15px;}
-.padding15-10{ padding:15px 10px;}
-.ptl5-10{ padding:5px 10px;}
-.ptl3-10{ padding:3px 10px;}
-.ptl8-10{ padding:8px 10px;}
-
-
-
-.wb11{width:11%!important;}.wb89{width:89%!important;}
-
-.h3{ height:3px;}
-.h24{ height: 24px;}
-.h32{ height: 32px;}
-.h40{ height: 40px;}
-.h50{ height: 50px;}
-.h60{ height: 60px;}
-.h80{ height: 80px;}
-.h100{ height:100px;}
-.h140{ height:140px;}
-.h200{ height:200px;}
-/*块*/
-.col-width{ background: #fff; border:1px solid #e8e8e8;}
-.col-width-10{ max-width: 100%; background: #fff; border:1px solid #e8e8e8;}
-.col-width-9{ max-width: 90%; background: #fff; border:1px solid #e8e8e8;}
-.col-width-8{ max-width: 80%; background: #fff; border:1px solid #e8e8e8;}
-.col-width-7{ max-width: 70%; background: #fff; border:1px solid #e8e8e8;}
-.col-width-6{ max-width: 60%; background: #fff; border:1px solid #e8e8e8;}
-.col-width-5{ max-width: 50%; background: #fff; border:1px solid #e8e8e8;}
-.col-width-4{ max-width: 40%; background: #fff; border:1px solid #e8e8e8;}
-.col-width-3{ width: 500px; background: #fff; border:1px solid #e8e8e8;
-position:absolute;left:-510px;top:0;}
-.col-width-2{ max-width: 20%; background: #fff; border:1px solid #e8e8e8;}
-.col-width-1{ max-width: 10%; background: #fff; border:1px solid #e8e8e8;}
-/*按钮*/
-a.task-btn{cursor: pointer;display: inline-block;border: none;padding: 0 12px;color: #666;background: #e1e1e1;letter-spacing: 1px;text-align: center;font-size: 14px;height: 30px;line-height: 30px;border-radius: 3px; }
-a.task-btn-green{background: #29bd8b; color: #fff!important;}
-a:hover.task-btn-green{background: #19b17e;}
-a.task-btn-orange{background: #FF7500; color:#fff!important;}
-a.task-newbtn-grey{background-color: #e1e1e1;color: #666666;}/*删除取消退出类按钮*/
-a:hover.task-newbtn-grey{color: #333}
-a.task-btn-blue{background: #199ed8; color:#fff!important;}
-a:hover.task-btn-blue{background: #199ed8;color:#fff;}
-a.task-btn-grey{background-color: #d4d6d8; color: #4d555d!important;}
-a:hover.task-btn-grey{background-color: #d4d6d8; color: #4d555d;}
-a.task-btn-grey-white{background-color: #c2c4c6; color: #fff;}
-a:hover.task-btn-grey-white{background-color: #a9abad;}
-a.new-btn{display: inline-block;border:none; padding:0 10px;color: #666;background: #e1e1e1; text-align:center;font-size: 12px; height: 30px;border-radius: 3px; line-height: 30px;}
-a.new-btn:hover{background: #c3c3c3; color: #333;}
-a.new-btn-green{background: #29bd8b; color: #fff;}
-a.new-btn-green:hover{background:#19b17e; }
-a.new-btn-blue{background: #6a8abe; color: #fff!important;}
-a.new-btn-blue:hover{background:#5f7cab; }
-a.new-bigbtn{display: inline-block;border:none; padding:2px 30px;color: #666;background: #e1e1e1; text-align:center;font-size: 14px; height: 30px;line-height: 30px; border-radius: 3px;}
-a:hover.new-bigbtn{background: #c3c3c3; color: #333;}
-a.new-bigbtn-green{background: #3b94d6; color: #fff;}
-a.new-bigbtn-green:hover{background: #2384cd; color: #fff;}
-a.task-btn-ver{ height:45px; line-height: 45px; background: #FF7500; color: #fff !important; border-radius:5px; font-size:12px; padding:0 10px;}
-a.rest-btn-ver{ cursor: not-allowed; background: #ccc;}
-a.task-btn-ver-line{height:43px; line-height: 43px; border-radius:5px; font-size:12px; padding:0 10px; border:1px solid #ccc;}
-a:hover.task-btn-ver-line{ border:1px solid #29bd8b;}
-a:hover.rest-btn-ver{ cursor: not-allowed; background: #ccc;}
-.new_login_submit_disable{ width:265px; height:40px; line-height: 40px; background:#ccc; color:#fff; font-size:14px; border-radius:5px; border:none; text-align:center; cursor:pointer; vertical-align: middle;}
-.new_login_submit,a.new_login_submit{ display: block; text-decoration: none !important; width:100%; height:45px; line-height: 45px; background:#29bd8b; color:#fff !important; font-size:14px; border-radius:5px; border:none; text-align:center; cursor:pointer; vertical-align: middle;}
-.new_login_submit a{ color:#fff !important; text-decoration: none;}
-.new_login_submit:hover{background: #19b17e;}
-a.task-btn-email{display: inline-block;font-weight: bold;border: none; width:185px;color: #666;background: #e1e1e1;letter-spacing: 1px;text-align: center;font-size: 14px;height: 40px;line-height: 40px;border-radius: 3px;}
-a:hover.task-btn-email {background: #c3c3c3; color: #666;}
-
-.white-btn-h40{text-align:center;cursor: pointer;display: inline-block;padding: 5px 10px;border: 1px solid #ccc;color: #666;letter-spacing: 1px;font-size: 14px;height: 26px;line-height: 26px;border-radius: 3px;}
-a.white-btn.green-btn{color:#29bd8b;border:1px solid #29bd8b; }
-a.white-btn.gery-btn{color: #aaa;border: 1px solid #aaa}
-a.white-btn.gery-btn:hover{color: #FFFFFF;border: 1px solid #aaa;background: #aaa}
-a.white-btn.orange-bg-btn,a.white-btn-h40.orange-bg-btn{color: #FFFFFF;border: 1px solid #FF7500;background: #ff7500}
-a.grey-btn{padding: 0px 8px;height: 30px;line-height: 30px;background-color: #eaeaea;color: #7f7f7f;font-size: 14px;border-radius: 3px;}
-
-.invite-btn{display: block;padding: 1px 10px;background: #fff;color: #333;border-radius: 4px;}
-a.decoration{text-decoration: underline!important;}
-/*07-11 新添加的公用样式 cs*/
-a.course-btn{cursor: pointer;font-weight: bold;border-radius: 4px;display: inline-block;width: auto;padding: 0px 12px;background-color: #FFFFFF;color: #44bfa3;letter-spacing: 1px;height: 30px;line-height: 30px;}
-.bc-grey{background-color: #CCCCCC!important;}
-.bc-white{background-color: #ffffff!important;}
-a.course-bth-blue{cursor: pointer;background-color:#199ed8 ;color: #ffffff !important;display: inline-block;font-weight: bold;border: none;padding: 0 12px;letter-spacing: 1px;text-align: center;font-size: 14px;height: 30px;line-height: 30px;border-radius: 3px;}
-a.course-bth-orange{cursor: pointer;background-color:#ff6530 ;color: #ffffff !important;display: inline-block;font-weight: bold;border: none;padding: 0 12px;letter-spacing: 1px;text-align: center;font-size: 14px;height: 30px;line-height: 30px;border-radius: 3px;}
-.topic-hover a:hover{background:#ff7500;color:#fff;}
-/*.topic-hover li a:hover{color:#fff;}*/
-/*提示条*/
-.alert{ padding:10px;border: 1px solid transparent; text-align: center;}
-.alert-blue{ background-color: #d9edf7;border-color: #bce8f1; color: #3a87ad;}
-.alert-orange{ background-color: #fff9e9;border-color: #f6d0b1; color:#ee4a20;}
-.alert-green{ background-color: #dff0d8;border-color: #d6e9c6; color:#3c763d;}
-.task-close{padding: 0;cursor: pointer; background: transparent; border: 0; -webkit-appearance: none; font-size: 21px; font-weight: bold;line-height: 1; color: #000000; text-shadow: 0 1px 0 #ffffff; opacity: 0.3;}
-.taskclose:hover{opacity: 0.5;}
-.alert-red{background-color: #f2dede;border-color: #eed3d7; color: #d14f4d; text-align: left!important;}
-/*tag*/
-.task-tag{ padding:0 10px; text-align: center; display:inline-block; height:30px; line-height: 30px;}
-.tag-blue{ background-color: #d9edf7; color: #3a87ad;}
-.tag-grey{ background-color: #f3f5f7; color: #4d555d;}
-.tag-border-grey{ background-color: #fff;border-color: #e2e2e2; color: #888;}
-.cir-orange{background: #ff6530;color: #fff; border-radius: 15px; padding: 0 5px; display: inline-block; font-size: 12px; height: 16px;line-height: 16px; }
-.cir-red{background: red;color: #fff; border-radius: 15px; padding: 0 5px; display: inline-block; font-size: 12px; height: 16px;line-height: 16px; }
-.red-cir-btn{ background:#e74c3c; padding:1px 5px; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; color:#fff; font-weight:normal;font-size:12px;}
-/****************************/
-/* 页面结构*/
-.task-pm-content{ width: 1000px; margin: 0 auto; }
-.task-pm-box{ width: 100%; background: #fff; border: 1px solid #e8e8e8;}
-.task-paner-con{ padding:15px; color:#666; line-height:2.0;}
-.task-text-center{ text-align: center;}
-.flow_hidden{ width:300px;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;}
-/*pre标签换行*/
-.break_word{word-break: break-all;word-wrap: break-word;}
-.break_word_firefox{white-space: pre-wrap !important;word-break: break-all;}
-.pre_word{white-space: pre-wrap;word-wrap: break-word;word-break: normal;}
-.pr {position:relative;}
-.df {display:flex;display: -webkit-flex;display: -ms-flex;}
-.df-js-ac{ justify-content:space-around;-webkit-justify-content: space-around;-webkit-align-items:center;-ms-flex-align:center; align-items: center;}
-
-.w28 {width: 28px;}
-.w40{ width: 40px;}
-.w50{width: 50px;}.edu-txt-w50{ width:50px;}
-.w60{width: 60px;}
-.w70{width: 70px;}
-.w80 {width: 80px;}
-.w100{width: 100px;}
-.w120{width: 120px;}
-.w150{width: 150px;}
-.w200{width: 200px;}
-.w300{width: 300px;}
-.w320{width: 320px;}
-.edu-w245{ width: 245px; }.w266{width: 266px;}
-.w780{width: 780px;}
-.w850{width: 850px;}
-.w900{width: 900px;}
-
-
-
-.with10{ width: 10%;}.with15{ width: 15%;}
-.with20{ width: 20%;}.with25{ width: 25%;}
-.with30{ width: 30%;}.with35{ width: 35%;}
-.with40{ width: 40%;}.with45{ width: 45%;}.with49{ width: 49%;}
-.with50{ width: 50%;}.with55{ width: 55%;}
-.with52{ width: 52%;}.with48{ width: 48%;}
-.with60{ width: 60%;}.with65{ width: 65%;}
-.with70{ width: 70%;}.with73{ width: 73%;}.with75{ width: 75%;}
-.with70{ width: 70%;}.with73{ width: 73%;}.with75{ width: 75%;}
-.with80{ width: 80%;}.with85{ width: 85%;}
-.with87{ width: 87%;}.with90{ width: 90%;}.with95{ width: 95%;}
-.with100{ width: 100%;}
-.edu-bg{ background:#fff!important;}
-.disabled-bg{ background:#eee !important;}
-.disabled-grey-bg{ background: #a4a4a4 !important;}
-/* 课程共用 后期再添加至公共样式 bylinda*/
-a.link-name-dark{ color:#666; max-width:140px; display: block; }
-a:hover.link-name-dark{ color:#ff7500;}
-/* 超过宽度省略 */
-.edu-name-dark{ max-width:100px; display: block; }
-.edu-info-dark{ max-width:345px; display: block; }
-.edu-max-h200{ height:200px; overflow: auto;}
-.edu-h260{ height:260px;}
-.edu-position{ position: relative;}
-.edu-h200-auto{ max-height:200px; overflow:auto;}
-.edu-h300-auto{ max-height:300px; overflow:auto;}
-.edu-h350-auto{ max-height:350px; overflow:auto;}
-.edu-txt-w240{ width:240px; display: block;}
-.edu-txt-w280{ width:280px; display: block;}
-.edu-txt-w320{ width:320px; display: block;}
-.edu-txt-w200{ width:200px; display: block;}
-a.edu-txt-w280,.edu-txt-w280{ width:280px; display: inline-block;text-align: center}
-a.edu-txt-w190,.edu-txt-w190{ width:190px; display: inline-block;text-align: center}
-a.edu-txt-w160,.edu-txt-w160{ width:160px; display: inline-block;text-align: center}
-a.edu-txt-w140,.edu-txt-w140{ width:141px; display: inline-block;text-align: center}
-a.edu-txt-w130,.edu-txt-w130{ width:130px; display: inline-block;text-align: center}
-a.edu-txt-w120,.edu-txt-w120{ width:120px; display: inline-block;text-align: center}
-a.edu-txt-w100,.edu-txt-w100{ width:100px; display: inline-block;text-align: center}
-a.edu-txt-w90,.edu-txt-w90{ width:90px; display: inline-block;text-align: center}
-a.edu-txt-w80,.edu-txt-w80{ width:80px; display: inline-block;text-align: center}
-.overellipsis{overflow: hidden;white-space: nowrap;text-overflow: ellipsis;}
-/* 筛选按钮 */
-.edu-btn-search{ position: absolute; top:0; right:15px;}
-.edu-con-top{ padding:10px 0; background:#fff; border-bottom:1px solid #eee;font-size:16px; }
-.edu-con-top h2{ font-size:16px;}
-.edu-form-label{display: inline-block; width:60px;text-align: right; line-height: 40px; font-weight: normal;}
-.edu-form-border{ border:1px solid #ddd;}
-.edu-form-notice-border{ border:1px solid #f27d61 !important;}
-.edu-form-noborder,input.edu-form-noborder{ border:none; outline:none;}
-a.edu-btn{display: inline-block;border:none; padding:0 12px;color: #666!important;border:1px solid #ccc; text-align:center;font-size: 14px; height: 29px;line-height: 29px; border-radius:3px; font-weight: bold;letter-spacing:1px;}
-a:hover.edu-btn{ border:1px solid #5faee3; color: #5faee3!important;}
-.edu-cir-grey{ display: inline-block; padding:0px 5px; color:#666; background:#f3f3f3; text-align: center; border-radius:15px; font-size:12px; line-height:20px!important;}
-.edu-cir-grey1{ display: inline-block; padding:0px 5px; margin-left: 5px; color:#666; background:#ccc; text-align: center; border-radius:15px; font-size:12px; line-height:20px!important;}
-.edu-cir-grey-q{ display: inline-block; padding:0px 7px; color:#666; background:#f3f3f3; text-align: center; border-radius:15px; font-size:12px; line-height:20px!important;}
-.edu-cir-orange{ display: inline-block; padding:0px 7px; color:#fff; background:#FF7500; text-align: center; border-radius:15px; font-size:12px; line-height:20px!important;}
-
-/*a.edu-filter-cir-grey{display: inline-block; padding:0px 15px; color:#666; border:1px solid #ddd; text-align: center; border-radius:3px; font-size:12px; height:25px; line-height:25px;}
-a:hover.edu-filter-cir-grey,a.edu-filter-cir-grey.active{ border:1px solid #3498db; color:#3498db; }*/
-
-
-.eud-pointer{ cursor:pointer;}
-.edu-bg-grey{ background:#f6f6f6; width:90%; min-width:700px; color:#666;}
-/* table-1底部边框 */
-.edu-pop-table{ width: 100%; border:1px solid #eee; border-bottom:none; background:#fff; color:#888;cursor: default}
-.edu-pop-table tr{ height:40px; }
-.edu-pop-table tr.edu-bg-grey{ background:#f5f5f5;}
-
-.edu-pop-table tr th{ color:#333;border-bottom:1px solid #eee; }
-.edu-pop-table tr td{border-bottom:1px solid #eee;}
-.edu-pop-table.table-line tr td,.edu-pop-table.table-line tr th{ border-right:1px solid #eee;}
-.edu-pop-table.table-line tr td:last-child,.edu-pop-table.table-line tr th:last-child{border-right:none;}
-.edu-pop-table tr td .alink-name{color: #333!important;}
-.edu-pop-table tr td .alink-name:hover{color: #FF7500!important;}
-.edu-pop-table tr td .alink-operate{color: #cccccc!important;}
-.edu-pop-table tr td .alink-operate:hover{color: #FF7500!important;}
-/*th行有背景颜色且table无边框*/
-.edu-pop-table.head-color thead tr{background: #fafbfb}
-.edu-pop-table.head-color{border: none}
-.edu-pop-table.head-color tr:last-child td {border: none}
-/*--表格行间隔背景颜色-*/
-.edu-pop-table.interval-td thead tr{background: #fafbfb}
-.edu-pop-table.interval-td tbody tr:nth-child(even){background: #fafbfb}
-.edu-pop-table.interval-td tbody tr td{border: none}
-/*--表格行间隔背景颜色(th也没有边框)-*/
-.edu-pop-table.interval-all{border:none}
-.edu-pop-table.interval-all thead th{border: none}
-.edu-pop-table.interval-all thead tr{background: #fafbfb}
-.edu-pop-table.interval-all tbody tr:nth-child(even){background: #fafbfb}
-.edu-pop-table.interval-all tbody tr td{border: none;padding:5px 0px}
-/*--表格行移入背景颜色-*/
-.edu-pop-table.hover-td tbody tr:hover{background: #EFF9FD}/*悬浮颜色为天蓝色*/
-.edu-pop-table.hover-td_1 tbody tr:hover{background:#FCF2EC}/*悬浮颜色为浅橙色*/
-/* table-2全边框 */
-.edu-pop-table-all{ width: 100%; border:1px solid #eee; background:#fff; color:#888;border-collapse: collapse}
-.edu-pop-table-all tr{ height:30px; }
-.edu-pop-table-all tr.edu-bg-grey{ background:#f5f5f5;}
-.edu-pop-table-all tr th{ color:#333;border:1px solid #eee; }
-.edu-pop-table-all tr td{border:1px solid #eee;padding: 5px}
-
-
-
-.edu-line{ border-bottom:1px solid #eee;}
-table.table-th-grey th{ background:#f5f5f5;}
-table.table-pa5 th,table.table-pa5 td{ padding:0 5px;}
-.panel-comment_item .orig_cont-red{ border:solid 2px #cc0000; border-radius:10px; padding:4px;color:#999;margin-top:-1px; }
-/***** loading ******/
-/***** Ajax indicator ******/
-#ajax-indicator {
- position: absolute; /* fixed not supported by IE*/
- background-color:#eee;
- border: 1px solid #bbb;
- top:35%;
- left:40%;
- width:20%;
- /*height:5%;*/
- font-weight:bold;
- text-align:center;
- padding:0.6em;
- z-index:100000;
- opacity: 0.5;
-}
-
-html>body #ajax-indicator { position: fixed; }
-
-#ajax-indicator span{
- color:#fff;
- color: #333333;
- background-position: 0% 40%;
- background-repeat: no-repeat;
- background-image: url(/images/loading.gif);
- padding-left: 26px;
- vertical-align: bottom;
- z-index:100000;
-}
-
-
-/*----------------------列表结构*/
-.forum_table .forum_table_item:nth-child(odd){background: #fafbfb}
-.forum_table_item{padding: 20px 15px;display: flex;}
-.forum_table_item .item_name{color: #333}
-.forum_table_item .item_name:hover{color: #FF7500}
-
-
-.edu-bg{ background:#fff;}
-/*---------tab切换-----*/
-.task-tab{width:10%;height:42px;line-height:42px;text-align:center;color:#666;
- position:relative;cursor:pointer;}
-.task-tab.sheet{border-bottom:3px solid #5faee3;color:#5faee3;}
-.task-tab.bold{border-bottom:3px solid #5faee3;font-weight:bold;}
-.task-tab i{position:absolute;bottom:-9px;left:45%;color:#5faee3 !important;}
-
-.undis {display: none}
-.edu-change .panel-form-label{ line-height:1.9;}
-
-.title_type { line-height: 40px;height: 40px;border-bottom: 1px solid #eee;color: #666;padding-left: 15px; }
-.teacher_banner {border-bottom: 1px solid #eee}
-.zbg { background: url("/images/edu_user/richEditer.png") -195px -2px no-repeat; height: 18px; cursor: pointer}
-.zbg_latex { background: url("/images/edu_user/richEditer.png") -315px -3px no-repeat;height: 18px;cursor: pointer;}
-.latex{position:relative;top: 4px;}
-
-.white_bg {background: #fff}
-.user_tab_type {background: #FF6610}
-
-/*首页----------筛选切换(有数字)*/
-.user_course_filtrate{width: auto;text-align: center;line-height: 26px;}
-.user_filtrate_span1_bg{color: #FF7500}
-.user_filtrate_span2{width: auto;padding: 0px 6px;border-radius: 8px;background: #ccc;font-size: 12px;display: block;line-height: 15px;float: right;color: #FFFFFF; margin-top: 6px;}
-.user_filtrate_span2_bg{background: #FF7500!important;}
-.user_course_filtrate:hover .user_filtrate_span1{color: #FF7500!important;}
-.user_course_filtrate:hover .user_filtrate_span2{background: #FF7500!important;}
-/*课堂----------筛选切换(没有数字,默认白色背景)*/
-.course_filtrate{width: auto;padding:0px 10px;text-align: center;background: #eeeeee;border-radius: 10px;margin-right: 20px;line-height: 26px;}
-.course_filtrate:hover{background: #FF7500; color: #ffffff; }
-.course_filtrate_bg{background: #FF7500; color: #ffffff!important; }
-/*我的课堂----------筛选切换(没有数字,默认灰色背景)*/
-.edu-filter-cir-grey{color: #666!important;width: auto;padding:0px 15px;text-align: center;background: #f3f3f3;border-radius: 10px;display: block; height:25px; line-height:25px;}
-.edu-filter-cir-grey:hover{background: #FF7500; color: #ffffff!important;}
-.edu-filter-cir-grey.active{background: #FF7500; color: #ffffff!important;}
-
-.edu-find .edu-find-input{border-bottom: 1px solid #EEEEEE;}
-.edu-find .edu-find-input input{border: none;outline: none}
-.edu-find .edu-close{position: absolute;top: -1px;right: 7px;font-size: 18px;cursor: pointer;}
-.edu-find .edu-open{position: absolute;top: 1px;right: -18px}
-
-
-/*最新和最热导航条的公用样式*/
-.nav_check_item{margin-bottom:13px;border-bottom: 2px solid #FC7033;}
-.nav_check_item li{width:auto;width: 80px;text-align: center;cursor: pointer;height: 38px;line-height: 38px;border-top-right-radius:5px;border-top-left-radius:5px;}
-.nav_check_item li a{display: block;width: 100%;}
-
-.check_nav{background: #FC7033;color: #ffffff;}
-.check_nav a{color: #ffffff !important;}
-
-/*实训列表块里面的遮罩效果*/
-.black-half{position: absolute;left: 0;top:0px;width: 100%;height: 100%;background: rgba(0,0,0,0.4);z-index: 3;display: none;}
-.black-half-lock{width: 65px;height: 65px;border-radius: 50%;background:#8291a3;vertical-align: middle;text-align: center;margin:25% auto 0px;}
-.black-half-lock i{margin-top: 7px;}
-.black-half-info{width: 100%;text-align: center;color: #FFFFFF;margin-top:10px}
-.show-black{display: block;animation: black-down 1s linear 1;}
-@-webkit-keyframes black-down {
- 25% {-webkit-transform: translateY(0);}
- 50%, 100% {-webkit-transform: translateY(0);}
-}
-
-@keyframes black-down {
- 25% {transform: translateY(0);}
- 50%, 100% {transform: translateY(0);}
-}
-
-/*去掉IE input框输入时自带的清除按钮*/
-input::-ms-clear{display:none;}
-
-
-/*最小高度*/
-.mh750{min-height: 750px}
-.mh650{min-height: 650px}
-.mh580{min-height: 580px}
-.mh550{min-height: 550px}
-.mh510{min-height: 510px}
-.mh440{min-height: 440px}
-.mh400{min-height: 400px}
-.mh390{min-height: 390px}
-.mh360{min-height: 360px}
-.mh350{min-height: 350px}
-.mh320{min-height: 320px}
-.mh240{min-height: 240px}
-.mh200{min-height: 200px}
-
-/*---------------操作部分虚线边框-----------------*/
-.border-dash-orange{border: 1px dashed #ffbfaa}
-/*错误、危险、失败提示边框*/
-.border-error-result{border:1px dashed #ff5252}
-
-.border-dash-ccc{border-top:1px dashed #ccc;border-bottom:1px dashed #ccc;}
-
-.login-error{border:1px solid #ff5252!important;}/*登录时,输入的手机号码或者密码错误,边框变红*/
-.error-red{border: 1px solid #DB6666;background: #FFE6E5;border-radius: 3px;padding: 2px 10px;}
-.error-red i{color: #FF6666}
-
-
-/*---------------tab公用背景颜色-----------------*/
-.background-blue{background:#5ECFBA!important;}
-.background-orange{background: #FC7033!important;}
-.back-orange-main{background: #FC7500!important;color:#FFFFff!important;}/*主流橙色*/
-.back-orange-01{background: #FF9e6a!important;}/*带背景标题、带色彩分割线和操作入口*/
-.back-f6-grey{background: #F6F6F6;}
-.background-blue a{color:#ffffff!important;}
-.background-orange a{color: #ffffff!important;}
-/*---------------tab公用边框-----------------*/
-.border-bottom-orange{border-bottom: 2px solid #FC7033!important;}
-.bor-bottom-orange{border-bottom: 1px solid #FF9e6a!important;}
-.bor-bottom-greyE{border-bottom: 1px solid #EEEEEE!important;}
-.bor-top-greyE{border-top: 1px solid #EEEEEE!important;}
-/*---------------边框-----------------*/
-.bor-gray-c{border:1px solid #ccc;}
-.bor-grey-e{border:1px solid #eee;}
-.bor-grey-d{border:1px solid #ddd;}
-.bor-grey01{border:1px solid #E6EAEB;}
-.bor-orange{border:1px solid #FF7500;}
-.bor-blue{border:1px solid #5faee3;}
-.bor-red{border:1px solid #db0505;}
-.bor-none{border:none;}
-.bor-outnone{outline:none; border:0px;}
-/*延时*/
-.delay{border:1px solid #db0505;padding: 0px 10px;height: 23px;line-height: 23px;border-radius: 12px;display: block;float: left;color:#db0505 }
-
-/*-------------------------圆角-------------------------*/
-.bor-radius-upper{border-radius: 4px 4px 0px 0px;}
-.bor-radius4{border-radius: 4px;}
-.bor-radius20{border-radius: 20px;}
-.bor-radius-all{border-radius: 50%;}
-
-/*-------------------------旋转-------------------------*/
-.transform90{transform: rotate(90deg);}
-/*---------------------编辑器边框------------------------*/
-.kindeditor{background: #F0F0EE;height:22px;border:1px solid #CCCCCC;border-bottom: none}
-
-/*文本框只有下边框*/
-.other_input{border: none;border-bottom: 1px solid #aaa;outline: none}
-/*两端对齐*/
-.justify{text-align: justify!important;}
-
-/**/
-#edu-tab-nav .edu-position-hidebox li a{font-size: 12px}
-/*在线课堂*/
-.courseRefer{float:left; max-height:120px;margin-bottom:10px;overflow:auto; overflow-x:hidden;}
-.logo {width: 295px;height: 30px;border-style:none;position: absolute;top:50%;left:39%;}
-/**/
-.task-header-info .fork{font-weight:bold;font-size:14px;color:#666;}
-
-
-.memos_con a{color: #3b94d6!important;}
-.memos_con ul li{ list-style-type: disc!important; }
-.memos_con ol li{ list-style-type: decimal!important; }
-.memos_con li{ margin-bottom: 0!important; }
-.memos_con pre {overflow-x: auto;}
-
-/*详情a标签默认显示样式*/
-.a_default_show a{color: #136ec2!important}
-
-/*消息机制右侧小三角*/
-.tiding{width: 100%;height: 50px ;position: relative}
-.triangle {position: absolute;right: -1px;top:0px;width: 0;height: 0;border-top: 35px solid #29bd8b;border-left: 60px solid transparent;z-index: 1}
-.triangle-new{position: absolute;right: 1px;top: 0px;z-index: 2;font-size: 14px;color: white;transform: rotate(30deg);}
-.forum_news_list_item{padding: 15px 20px;}
-.forum_news_list_item:nth-child(odd){background-color:#FAFBFB }
-.listItem_right{line-height: 45px;float: right;max-width: 100px;margin-right: 15px;color: #888888}
-.listItem_middle{max-width: 980px;}
-.news_fa{font-size: 30px;color: #888;margin: 7px 16px;}
-.tiding_logo{text-align:center;background: #f3f3f3;width: 200px;height: 100px}
-
-.tr-position{position: absolute;left:54%;width: 20px;text-align: center;border: none!important;}
-
-.two_lines_show{ overflow: hidden;text-overflow: ellipsis;display: -webkit-box;-webkit-line-clamp: 2;-webkit-box-orient: vertical;height: 60px; word-wrap: break-word;}
-.two_lines_show_my{ overflow: hidden;text-overflow: ellipsis;display: -webkit-box;-webkit-line-clamp: 2;-webkit-box-orient: vertical;height: 40px; word-wrap: break-word;}
-.three_lines_show{ overflow: hidden;text-overflow: ellipsis;display: -webkit-box;-webkit-line-clamp: 3;-webkit-box-orient: vertical;height: 66px;line-height: 22px; word-wrap: break-word;}
-
-/*新版讨论区*/
-.discuss-tab a:hover{border-bottom: 2px solid #FC7033!important; color:#000;}
-.discuss-lh40{ line-height:40px;}.discuss-lh16{ line-height:16px}.discuss-lh20{ line-height:20px;}.discuss-lh20{ line-height:20px;}.discuss-lh30{ line-height:30px;}.discuss-lh50{ line-height:50px;}.discuss-lh60{line-height:60px}.discuss-lh80{line-height:80px;}.discuss-lh100{line-height:100px;}
-.discuss-bor-l{ border-left:4px solid #ff7500;}
-.page-turn:hover{background:#fff; color:#FF7500;}
-
-/*实训路径/镜像类别图片*/
-.hor-ver-center{width:80px; height:80px; position:absolute; left:50%; top:50%; margin-left:-40px; margin-top:-40px;}
-.hor-ver-center100{width:100px; height:100px; position:absolute; left:50%;top:25%; margin-left:-50px; margin-top:-25px;}
-.mirror-shade{ background: rgba(0,0,0,0.4); z-index: 3; display:none;}
-
-.position20{position:absolute; top:-60px; left:7%;}
-
-/*--------TA的主页、关注*/
-.user_watch{width: 78px;padding: 2px 0px!important;}
-
-
-/*-------------主页块的背景颜色----------------*/
-.edu-index-bg-green{ background:#5bcab1;}
-.edu-index-bg-blue{ background:#75b9de;}
-.edu-index-bg-purple{ background:#8f97df;}
-.edu-index-bg-yellow{ background:#f7bb74;}
-.edu-index-bg-orange{ background:#e48a81;}
-
-.bor-reds{
- border:1px solid #FF0000!important;
- border-radius: 4px;
- border-top-left-radius: 4px;
- border-top-right-radius: 4px;
- border-bottom-right-radius: 4px;
- border-bottom-left-radius: 4px;
-}
+@charset "utf-8";
+body{font-size:14px; line-height:2.0;background:#ffffff!important;font-family: "微软雅黑","宋体"; color:#333;height: 100%}
+html{height:100%;}
+.newContainer{ min-height:100%; height: auto !important; height: 100%; /*IE6不识别min-height*/position: relative;}
+.newMain{ margin: 0 auto; padding-bottom: 155px; min-width:1200px }
+.newFooter{ position: absolute; bottom: 0; width: 100%; height: 155px;background: #323232; clear:both; min-width: 1200px;z-index:99999;left: 0px;}
+/* 重置样式 */
+body,h1,h2,h3,h4,h5,h6,hr,p,blockquote,dl,dt,dd,ul,ol,li,pre,form,fieldset,legend,button,input,textarea,th,td,span{ margin:0; padding:0;}
+table,input,textarea,select,button { font-family: "微软雅黑","宋体"; font-size:14px;line-height:1.9; background:#f5f5f5; color:#333;}
+div,img,tr,td,table{ border:0;}
+table,tr,td{border:0;}
+ol,ul,li{ list-style-type:none}
+a:link,a:visited{text-decoration:none;color:#898989; }
+a:hover {color:#FF7500;}
+a:hover.fa{color:#FF7500;}
+
+input,textarea,select{ background: #fff; border:1px solid #eee;}
+textarea{resize: none;}
+/*侧滚动条*/
+::-webkit-scrollbar { width:10px; height:10px; background-color: #F5F5F5; }
+::-webkit-scrollbar-track { -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3); background-color: #F5F5F5; }
+::-webkit-scrollbar-thumb { -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,.3); background-color: #ccc; }
+/*万能清除浮动*/
+.clearfix:after{clear:both;content:".";display:block;font-size:0;height:0;line-height:0;visibility:hidden;}
+.clearfix{clear:both;zoom:1}
+.cl{ clear: both; overflow: hidden;}
+/*通用浮动*/
+.fl{ float: left;}
+.fr{ float: right;}
+/*pre标签换行*/
+.break-word{word-break: break-all;word-wrap: break-word;white-space: pre-wrap;}
+.break-word-firefox{white-space: pre-wrap !important;word-break: break-all;}
+/*超过隐藏*/
+.task-hide{overflow:hidden; white-space: nowrap; text-overflow:ellipsis;}
+.task-hide2{overflow:-moz-hidden-unscrollable; white-space: nowrap; text-overflow:ellipsis;}
+.hide{overflow:hidden; white-space: nowrap; text-overflow:ellipsis;}
+.hide-text {overflow:hidden; white-space:nowrap;}
+/*隐藏*/
+.none{display: none}
+.block{ display:block;}
+/*通用文字功能样式*/
+.font-bd{ font-weight: bold;}
+.color-red-light{color: #F00!important;}
+.color-red{ color:#d2322d!important;}
+.u-color-light-red{color: #FF6666}
+.color-black{color:#333!important;}
+.color-green{color:#51a74f!important;}
+.color-light-green{color:#29bd8b!important;}
+.color-blue{color:#3498db!important;}
+.color-orange{color:#ee4a1f!important;}
+.color-orange02{color:#f79f88!important;}
+.color-orange03{color:#ff7500!important;}
+.color-orange04{color: #ee4a20!important;}/*温馨提示公用颜色*/
+.color-orange05{color: #4CACFF!important;}
+.color-orange06{color: #ff6530!important;}
+a.color-orange05:hover,i.color-orange05:hover{color:#ff7500!important;}
+.color-orange06{color:#FF6610!important;}
+.color-yellow{color:#f0ad4e!important;}
+.color-yellow2{color:#ff9933!important;}
+.color-yellow3{color:#FFC828;}/*新版学员统计---通关排行榜 2018/01/22*/
+
+.color-light-grey{color:#afafaf!important;}
+.color-grey-7f{color: #7f7f7f!important;}
+.color-grey-no-a{color:#888!important;}
+.color-grey{color:#888!important;}
+.color-grey9{color:#999!important;}
+a.color-grey:hover{color: #FF7500!important;}/*a标签,移入变橙色*/
+.color-dark-grey{color:#666!important;}
+.color-grey3{color:#333!important;}
+a.color-grey3:hover{color: #ff7500!important;}
+.u-color-light-grey{color: #CCCCCC}
+.color-light-grey-C{color: #CCCCCC!important;}
+.color-light-grey-E{color: #EEEEEE}
+.color-grey-bf{color:#bfbfbf!important;}
+.color-grey-bf:hover{color: #FF7500!important;}
+.color-grey-b{color:#bbbbbb!important;}
+
+.-text-danger{ color:#FF6545 }
+.color_white{ color:#fff!important;}
+.color_Purple_grey{color: #8291a3!important;}/*TPI评论里右侧点赞的icon颜色*/
+.color-grey-c{color: #cccccc!important;}
+.color-grey-3{color: #333333 !important;}
+a.link-color-grey{color:#888!important;}
+a:hover.link-color-grey{color:#29bd8b!important;}
+a.link-color-green{color:#29bd8b!important;}
+a.link-color-blue{color:#6a8abe!important;}
+a.link-color-grey02{color:#888!important;}
+a:hover.link-color-grey02{ color:red!important;}
+a.link-color-grey03{color:#888!important;}
+a:hover.link-color-grey03{color:#3498db!important;}
+.edu-color-grey{ color:#666;}
+.edu-color-grey:hover{color:#ff7500;}
+/*通用背景颜色*/
+.back-color-orange{background-color: #FF7500}
+
+
+/*通用文字大小样式*/
+.font-12{ font-size: 12px!important;}
+.font-13{ font-size: 13px!important;}
+.font-14{ font-size: 14px!important;}
+.font-15{ font-size: 15px!important;}
+.font-16{ font-size: 16px!important;}
+.font-17{ font-size: 17px!important;}
+.font-18{ font-size: 18px!important;}
+.font-20{ font-size: 20px!important;}
+.font-22{ font-size: 22px!important;}
+.font-24{ font-size: 24px!important;}
+.font-28{ font-size: 28px!important;}
+.font-30{ font-size: 30px!important;}
+.font-50{ font-size: 50px!important;}
+.font-60{ font-size: 60px!important;}
+.font-70{ font-size: 70px!important;}
+/*通用内外边距*/
+.mt-10{ margin-top:-10px;}.mt1{ margin-top:1px;}.mt2{ margin-top:2px;}.mt3{ margin-top:3px;}.mt4{ margin-top:4px;}.mt5{ margin-top:5px!important;}.mt6{ margin-top:6px;}.mt7{ margin-top:7px!important;}.mt8{ margin-top:8px;}.mt10{ margin-top:10px;}.mt12{ margin-top:12px;}.mt13{ margin-top:13px;}.mt15{ margin-top:15px;}.mt17{ margin-top:17px;}.mt20{ margin-top:20px!important;}.mt25{ margin-top:25px;}.mt30{ margin-top:30px!important;}.mt36{ margin-top:36px!important;}.mt40{ margin-top:40px;}.mt50{ margin-top:50px;}.mt70{ margin-top:70px;}.mt95{ margin-top:95px;}.mt100{ margin-top:100px;}
+.mb5{ margin-bottom: 5px;}.mb7{ margin-bottom: 7px;}.mb10{ margin-bottom: 10px;}.mb11{ margin-bottom: 11px;}.mb15{ margin-bottom: 15px;}.mb20{ margin-bottom: 20px;}.mb25{ margin-bottom: 25px;}.mb30{ margin-bottom: 30px!important;}.mb40{ margin-bottom: 40px!important;}.mb50{ margin-bottom: 50px!important;}.mb60{ margin-bottom: 60px!important;}.mb70{ margin-bottom: 70px!important;}.mb80{ margin-bottom: 80px!important;}.mb90{ margin-bottom: 90px!important;}.mb100{ margin-bottom: 100px!important;}.mb110{ margin-bottom: 110px;}
+.ml-3{ margin-left: -3px;}.ml1{margin-left: 1px;}.ml2{margin-left: 2px;}.ml3{margin-left: 3px;}.ml4{margin-left: 4px;}.ml5{ margin-left: 5px;}.ml6{ margin-left: 6px;}.ml10{ margin-left: 10px;}.ml12{ margin-left:12px!important;}.ml13{margin-left: 13px}.ml15{ margin-left: 15px;}.ml18{ margin-left: 18px;}.ml20{ margin-left: 20px;}.ml25{ margin-left: 25px;}.ml30{ margin-left: 30px;}.ml33{ margin-left: 33px;}.ml35{ margin-left:35px;}.ml40{margin-left:40px;}.ml42{margin-left:42px;}.ml45{ margin-left: 45px;}.ml50{ margin-left: 50px;}.ml55{ margin-left: 55px;}.ml60{ margin-left: 60px;}.ml75{ margin-left: 75px;}.ml80{ margin-left: 80px;}.ml85{margin-left:85px;}.ml95{ margin-left: 95px;}.ml115{margin-left: 115px}.ml123{ margin-left: 123px;}.ml150{ margin-left: 150px;}.ml180{ margin-left: 180px;}.ml230{ margin-left: 230px;}.ml240{margin-left: 240px;}.ml250{margin-left: 250px;}.ml290{ margin-left: 290px;}
+.mr3{margin-right: 3px}.mr4{margin-right: 4px}.mr5{ margin-right: 5px;}.mr8{ margin-right: 8px;}.mr10{ margin-right: 10px;}.mr12{ margin-right:12px!important;}.mr15{ margin-right: 15px;}.mr18{ margin-right: 18px;}.mr20{ margin-right: 20px;}.mr25{ margin-right: 25px;}.mr30{ margin-right:30px;}.mr35{margin-right:35px;}.mr40{margin-right:40px;}.mr45{margin-right:45px;}.mr50{ margin-right: 50px;}.mr60{ margin-right:60px;}.mr350{ margin-right:350px;}.pt5{ padding-top:5px;}.pt10{ padding-top:10px;}.pt15{ padding-top:15px;}.pt20{ padding-top:20px;}.pt30{ padding-top:30px;}.pt40{ padding-top:40px;}.pt47{ padding-top:47px;}.pt100{padding-top:100px;}.pt130{padding-top:130px;}
+
+.pt1{ padding-top:1px;}.pt5{ padding-top:5px;}.pt10{ padding-top:10px;}.pt15{ padding-top:15px;}.pt20{ padding-top:20px;}.pt30{ padding-top:30px;}.pt40{ padding-top:40px;}
+.pb5{ padding-bottom:5px;}.pb10{ padding-bottom:10px;}.pb15{ padding-bottom:15px;}.pb20{ padding-bottom:20px;}.pb30{ padding-bottom:30px;}.pb40{ padding-bottom:40px;}.pb47{ padding-bottom:47px;}.pb50{ padding-bottom:50px;}.pb155{ padding-bottom:155px;}
+.pl2{ padding-left:2px;}.pl5{ padding-left:5px;}.pl8{ padding-left:8px;}.pl10{ padding-left:10px;}.pl15{ padding-left:15px;}.pl20{ padding-left:20px;}.pl28{ padding-left:28px;}.pl30{ padding-left:30px;}.pl33{padding-left: 33px}.pl40{ padding-left:40px;}.pl42{ padding-left:42px;}.pl45{ padding-left:45px;}.pl50{ padding-left:50px;}.pl100{ padding-left:100px;}.pl35{ padding-left:35px;}.pl50{padding-left:50px;}.pl70{padding-left:70px;}.pl80{padding-left:80px;}.pl92{padding-left:92px;}
+.pr2{ paddding-right:2px;}.pr5{ padding-right:5px;}.pr10{ padding-right:10px;}.pr15{ padding-right:15px;}.pr20{ padding-right:20px!important;}.pr30{ padding-right:30px!important;}.pr42{ padding-right:42px;}.pr45{ padding-right:45px;}
+
+.pl2{ padding-left:2px;}.pl5{ padding-left:5px;}.pl8{ padding-left:8px;}.pl10{ padding-left:10px;}.pl15{ padding-left:15px;}.pl20{ padding-left:20px;}.pl28{ padding-left:28px;}.pl30{ padding-left:30px;}.pl33{padding-left: 33px}.pl40{ padding-left:40px;}.pl42{ padding-left:42px;}.pl45{ padding-left:45px;}.pl50{ padding-left:50px;}.pl100{ padding-left:100px;}.pl35{ padding-left:35px;}.pl50{padding-left:50px;}.pl70{padding-left:70px;}.pl80{padding-left:80px;}.pl92{padding-left:92px;}
+.pr2{ paddding-right:2px;}.pr5{ padding-right:5px;}.pr10{ padding-right:10px;}.pr15{ padding-right:15px;}.pr20{ padding-right:20px!important;}.pr30{ padding-right:30px!important;}.pr42{ padding-right:42px;}.pr45{ padding-right:45px;}
+
+
+.padding15{ padding:15px;}
+.padding10{ padding:10px;}
+.padding10-15{ padding:10px 15px;}
+.padding15-10{ padding:15px 10px;}
+.ptl5-10{ padding:5px 10px;}
+.ptl3-10{ padding:3px 10px;}
+.ptl8-10{ padding:8px 10px;}
+
+
+
+.wb11{width:11%!important;}.wb89{width:89%!important;}
+
+.h3{ height:3px;}
+.h24{ height: 24px;}
+.h32{ height: 32px;}
+.h40{ height: 40px;}
+.h50{ height: 50px;}
+.h60{ height: 60px;}
+.h80{ height: 80px;}
+.h100{ height:100px;}
+.h140{ height:140px;}
+.h200{ height:200px;}
+/*块*/
+.col-width{ background: #fff; border:1px solid #e8e8e8;}
+.col-width-10{ max-width: 100%; background: #fff; border:1px solid #e8e8e8;}
+.col-width-9{ max-width: 90%; background: #fff; border:1px solid #e8e8e8;}
+.col-width-8{ max-width: 80%; background: #fff; border:1px solid #e8e8e8;}
+.col-width-7{ max-width: 70%; background: #fff; border:1px solid #e8e8e8;}
+.col-width-6{ max-width: 60%; background: #fff; border:1px solid #e8e8e8;}
+.col-width-5{ max-width: 50%; background: #fff; border:1px solid #e8e8e8;}
+.col-width-4{ max-width: 40%; background: #fff; border:1px solid #e8e8e8;}
+.col-width-3{ width: 500px; background: #fff; border:1px solid #e8e8e8;
+position:absolute;left:-510px;top:0;}
+.col-width-2{ max-width: 20%; background: #fff; border:1px solid #e8e8e8;}
+.col-width-1{ max-width: 10%; background: #fff; border:1px solid #e8e8e8;}
+/*按钮*/
+a.task-btn{cursor: pointer;display: inline-block;border: none;padding: 0 12px;color: #666;background: #e1e1e1;letter-spacing: 1px;text-align: center;font-size: 14px;height: 30px;line-height: 30px;border-radius: 3px; }
+a.task-btn-green{background: #29bd8b; color: #fff!important;}
+a:hover.task-btn-green{background: #19b17e;}
+a.task-btn-orange{background: #FF7500; color:#fff!important;}
+a.task-newbtn-grey{background-color: #e1e1e1;color: #666666;}/*删除取消退出类按钮*/
+a:hover.task-newbtn-grey{color: #333}
+a.task-btn-blue{background: #199ed8; color:#fff!important;}
+a:hover.task-btn-blue{background: #199ed8;color:#fff;}
+a.task-btn-grey{background-color: #d4d6d8; color: #4d555d!important;}
+a:hover.task-btn-grey{background-color: #d4d6d8; color: #4d555d;}
+a.task-btn-grey-white{background-color: #c2c4c6; color: #fff;}
+a:hover.task-btn-grey-white{background-color: #a9abad;}
+a.new-btn{display: inline-block;border:none; padding:0 10px;color: #666;background: #e1e1e1; text-align:center;font-size: 12px; height: 30px;border-radius: 3px; line-height: 30px;}
+a.new-btn:hover{background: #c3c3c3; color: #333;}
+a.new-btn-green{background: #29bd8b; color: #fff;}
+a.new-btn-green:hover{background:#19b17e; }
+a.new-btn-blue{background: #6a8abe; color: #fff!important;}
+a.new-btn-blue:hover{background:#5f7cab; }
+a.new-bigbtn{display: inline-block;border:none; padding:2px 30px;color: #666;background: #e1e1e1; text-align:center;font-size: 14px; height: 30px;line-height: 30px; border-radius: 3px;}
+a:hover.new-bigbtn{background: #c3c3c3; color: #333;}
+a.new-bigbtn-green{background: #3b94d6; color: #fff;}
+a.new-bigbtn-green:hover{background: #2384cd; color: #fff;}
+a.task-btn-ver{ height:45px; line-height: 45px; background: #FF7500; color: #fff !important; border-radius:5px; font-size:12px; padding:0 10px;}
+a.rest-btn-ver{ cursor: not-allowed; background: #ccc;}
+a.task-btn-ver-line{height:43px; line-height: 43px; border-radius:5px; font-size:12px; padding:0 10px; border:1px solid #ccc;}
+a:hover.task-btn-ver-line{ border:1px solid #29bd8b;}
+a:hover.rest-btn-ver{ cursor: not-allowed; background: #ccc;}
+.new_login_submit_disable{ width:265px; height:40px; line-height: 40px; background:#ccc; color:#fff; font-size:14px; border-radius:5px; border:none; text-align:center; cursor:pointer; vertical-align: middle;}
+.new_login_submit,a.new_login_submit{ display: block; text-decoration: none !important; width:100%; height:45px; line-height: 45px; background:#29bd8b; color:#fff !important; font-size:14px; border-radius:5px; border:none; text-align:center; cursor:pointer; vertical-align: middle;}
+.new_login_submit a{ color:#fff !important; text-decoration: none;}
+.new_login_submit:hover{background: #19b17e;}
+a.task-btn-email{display: inline-block;font-weight: bold;border: none; width:185px;color: #666;background: #e1e1e1;letter-spacing: 1px;text-align: center;font-size: 14px;height: 40px;line-height: 40px;border-radius: 3px;}
+a:hover.task-btn-email {background: #c3c3c3; color: #666;}
+
+.white-btn-h40{text-align:center;cursor: pointer;display: inline-block;padding: 5px 10px;border: 1px solid #ccc;color: #666;letter-spacing: 1px;font-size: 14px;height: 26px;line-height: 26px;border-radius: 3px;}
+a.white-btn.green-btn{color:#29bd8b;border:1px solid #29bd8b; }
+a.white-btn.gery-btn{color: #aaa;border: 1px solid #aaa}
+a.white-btn.gery-btn:hover{color: #FFFFFF;border: 1px solid #aaa;background: #aaa}
+a.white-btn.orange-bg-btn,a.white-btn-h40.orange-bg-btn{color: #FFFFFF;border: 1px solid #FF7500;background: #ff7500}
+a.grey-btn{padding: 0px 8px;height: 30px;line-height: 30px;background-color: #eaeaea;color: #7f7f7f;font-size: 14px;border-radius: 3px;}
+
+.invite-btn{display: block;padding: 1px 10px;background: #fff;color: #333;border-radius: 4px;}
+a.decoration{text-decoration: underline!important;}
+/*07-11 新添加的公用样式 cs*/
+a.course-btn{cursor: pointer;font-weight: bold;border-radius: 4px;display: inline-block;width: auto;padding: 0px 12px;background-color: #FFFFFF;color: #44bfa3;letter-spacing: 1px;height: 30px;line-height: 30px;}
+.bc-grey{background-color: #CCCCCC!important;}
+.bc-white{background-color: #ffffff!important;}
+a.course-bth-blue{cursor: pointer;background-color:#199ed8 ;color: #ffffff !important;display: inline-block;font-weight: bold;border: none;padding: 0 12px;letter-spacing: 1px;text-align: center;font-size: 14px;height: 30px;line-height: 30px;border-radius: 3px;}
+a.course-bth-orange{cursor: pointer;background-color:#ff6530 ;color: #ffffff !important;display: inline-block;font-weight: bold;border: none;padding: 0 12px;letter-spacing: 1px;text-align: center;font-size: 14px;height: 30px;line-height: 30px;border-radius: 3px;}
+.topic-hover a:hover{background:#ff7500;color:#fff;}
+/*.topic-hover li a:hover{color:#fff;}*/
+/*提示条*/
+.alert{ padding:10px;border: 1px solid transparent; text-align: center;}
+.alert-blue{ background-color: #d9edf7;border-color: #bce8f1; color: #3a87ad;}
+.alert-orange{ background-color: #fff9e9;border-color: #f6d0b1; color:#ee4a20;}
+.alert-green{ background-color: #dff0d8;border-color: #d6e9c6; color:#3c763d;}
+.task-close{padding: 0;cursor: pointer; background: transparent; border: 0; -webkit-appearance: none; font-size: 21px; font-weight: bold;line-height: 1; color: #000000; text-shadow: 0 1px 0 #ffffff; opacity: 0.3;}
+.taskclose:hover{opacity: 0.5;}
+.alert-red{background-color: #f2dede;border-color: #eed3d7; color: #d14f4d; text-align: left!important;}
+/*tag*/
+.task-tag{ padding:0 10px; text-align: center; display:inline-block; height:30px; line-height: 30px;}
+.tag-blue{ background-color: #d9edf7; color: #3a87ad;}
+.tag-grey{ background-color: #f3f5f7; color: #4d555d;}
+.tag-border-grey{ background-color: #fff;border-color: #e2e2e2; color: #888;}
+.cir-orange{background: #ff6530;color: #fff; border-radius: 15px; padding: 0 5px; display: inline-block; font-size: 12px; height: 16px;line-height: 16px; }
+.cir-red{background: red;color: #fff; border-radius: 15px; padding: 0 5px; display: inline-block; font-size: 12px; height: 16px;line-height: 16px; }
+.red-cir-btn{ background:#e74c3c; padding:1px 5px; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; color:#fff; font-weight:normal;font-size:12px;}
+/****************************/
+/* 页面结构*/
+.task-pm-content{ width: 1000px; margin: 0 auto; }
+.task-pm-box{ width: 100%; background: #fff; border: 1px solid #e8e8e8;}
+.task-paner-con{ padding:15px; color:#666; line-height:2.0;}
+.task-text-center{ text-align: center;}
+.flow_hidden{ width:300px;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;}
+/*pre标签换行*/
+.break_word{word-break: break-all;word-wrap: break-word;}
+.break_word_firefox{white-space: pre-wrap !important;word-break: break-all;}
+.pre_word{white-space: pre-wrap;word-wrap: break-word;word-break: normal;}
+.pr {position:relative;}
+.df {display:flex;display: -webkit-flex;display: -ms-flex;}
+.df-js-ac{ justify-content:space-around;-webkit-justify-content: space-around;-webkit-align-items:center;-ms-flex-align:center; align-items: center;}
+
+.w28 {width: 28px;}
+.w40{ width: 40px;}
+.w50{width: 50px;}.edu-txt-w50{ width:50px;}
+.w60{width: 60px;}
+.w70{width: 70px;}
+.w80 {width: 80px;}
+.w100{width: 100px;}
+.w120{width: 120px;}
+.w150{width: 150px;}
+.w200{width: 200px;}
+.w300{width: 300px;}
+.w320{width: 320px;}
+.edu-w245{ width: 245px; }.w266{width: 266px;}
+.w780{width: 780px;}
+.w850{width: 850px;}
+.w900{width: 900px;}
+
+
+
+.with10{ width: 10%;}.with15{ width: 15%;}
+.with20{ width: 20%;}.with25{ width: 25%;}
+.with30{ width: 30%;}.with35{ width: 35%;}
+.with40{ width: 40%;}.with45{ width: 45%;}.with49{ width: 49%;}
+.with50{ width: 50%;}.with55{ width: 55%;}
+.with52{ width: 52%;}.with48{ width: 48%;}
+.with60{ width: 60%;}.with65{ width: 65%;}
+.with70{ width: 70%;}.with73{ width: 73%;}.with75{ width: 75%;}
+.with70{ width: 70%;}.with73{ width: 73%;}.with75{ width: 75%;}
+.with80{ width: 80%;}.with85{ width: 85%;}
+.with87{ width: 87%;}.with90{ width: 90%;}.with95{ width: 95%;}
+.with100{ width: 100%;}
+.edu-bg{ background:#fff!important;}
+.disabled-bg{ background:#eee !important;}
+.disabled-grey-bg{ background: #a4a4a4 !important;}
+/* 课程共用 后期再添加至公共样式 bylinda*/
+a.link-name-dark{ color:#666; max-width:140px; display: block; }
+a:hover.link-name-dark{ color:#ff7500;}
+/* 超过宽度省略 */
+.edu-name-dark{ max-width:100px; display: block; }
+.edu-info-dark{ max-width:345px; display: block; }
+.edu-max-h200{ height:200px; overflow: auto;}
+.edu-h260{ height:260px;}
+.edu-position{ position: relative;}
+.edu-h200-auto{ max-height:200px; overflow:auto;}
+.edu-h300-auto{ max-height:300px; overflow:auto;}
+.edu-h350-auto{ max-height:350px; overflow:auto;}
+.edu-txt-w240{ width:240px; display: block;}
+.edu-txt-w280{ width:280px; display: block;}
+.edu-txt-w320{ width:320px; display: block;}
+.edu-txt-w200{ width:200px; display: block;}
+a.edu-txt-w280,.edu-txt-w280{ width:280px; display: inline-block;text-align: center}
+a.edu-txt-w190,.edu-txt-w190{ width:190px; display: inline-block;text-align: center}
+a.edu-txt-w160,.edu-txt-w160{ width:160px; display: inline-block;text-align: center}
+a.edu-txt-w140,.edu-txt-w140{ width:141px; display: inline-block;text-align: center}
+a.edu-txt-w130,.edu-txt-w130{ width:130px; display: inline-block;text-align: center}
+a.edu-txt-w120,.edu-txt-w120{ width:120px; display: inline-block;text-align: center}
+a.edu-txt-w100,.edu-txt-w100{ width:100px; display: inline-block;text-align: center}
+a.edu-txt-w90,.edu-txt-w90{ width:90px; display: inline-block;text-align: center}
+a.edu-txt-w80,.edu-txt-w80{ width:80px; display: inline-block;text-align: center}
+.overellipsis{overflow: hidden;white-space: nowrap;text-overflow: ellipsis;}
+/* 筛选按钮 */
+.edu-btn-search{ position: absolute; top:0; right:15px;}
+.edu-con-top{ padding:10px 0; background:#fff; border-bottom:1px solid #eee;font-size:16px; }
+.edu-con-top h2{ font-size:16px;}
+.edu-form-label{display: inline-block; width:60px;text-align: right; line-height: 40px; font-weight: normal;}
+.edu-form-border{ border:1px solid #ddd;}
+.edu-form-notice-border{ border:1px solid #f27d61 !important;}
+.edu-form-noborder,input.edu-form-noborder{ border:none; outline:none;}
+a.edu-btn{display: inline-block;border:none; padding:0 12px;color: #666!important;border:1px solid #ccc; text-align:center;font-size: 14px; height: 29px;line-height: 29px; border-radius:3px; font-weight: bold;letter-spacing:1px;}
+a:hover.edu-btn{ border:1px solid #5faee3; color: #5faee3!important;}
+.edu-cir-grey{ display: inline-block; padding:0px 5px; color:#666; background:#f3f3f3; text-align: center; border-radius:15px; font-size:12px; line-height:20px!important;}
+.edu-cir-grey1{ display: inline-block; padding:0px 5px; margin-left: 5px; color:#666; background:#ccc; text-align: center; border-radius:15px; font-size:12px; line-height:20px!important;}
+.edu-cir-grey-q{ display: inline-block; padding:0px 7px; color:#666; background:#f3f3f3; text-align: center; border-radius:15px; font-size:12px; line-height:20px!important;}
+.edu-cir-orange{ display: inline-block; padding:0px 7px; color:#fff; background:#FF7500; text-align: center; border-radius:15px; font-size:12px; line-height:20px!important;}
+
+/*a.edu-filter-cir-grey{display: inline-block; padding:0px 15px; color:#666; border:1px solid #ddd; text-align: center; border-radius:3px; font-size:12px; height:25px; line-height:25px;}
+a:hover.edu-filter-cir-grey,a.edu-filter-cir-grey.active{ border:1px solid #3498db; color:#3498db; }*/
+
+
+.eud-pointer{ cursor:pointer;}
+.edu-bg-grey{ background:#f6f6f6; width:90%; min-width:700px; color:#666;}
+/* table-1底部边框 */
+.edu-pop-table{ width: 100%; border:1px solid #eee; border-bottom:none; background:#fff; color:#888;cursor: default}
+.edu-pop-table tr{ height:40px; }
+.edu-pop-table tr.edu-bg-grey{ background:#f5f5f5;}
+
+.edu-pop-table tr th{ color:#333;border-bottom:1px solid #eee; }
+.edu-pop-table tr td{border-bottom:1px solid #eee;}
+.edu-pop-table.table-line tr td,.edu-pop-table.table-line tr th{ border-right:1px solid #eee;}
+.edu-pop-table.table-line tr td:last-child,.edu-pop-table.table-line tr th:last-child{border-right:none;}
+.edu-pop-table tr td .alink-name{color: #333!important;}
+.edu-pop-table tr td .alink-name:hover{color: #FF7500!important;}
+.edu-pop-table tr td .alink-operate{color: #cccccc!important;}
+.edu-pop-table tr td .alink-operate:hover{color: #FF7500!important;}
+/*th行有背景颜色且table无边框*/
+.edu-pop-table.head-color thead tr{background: #fafbfb}
+.edu-pop-table.head-color{border: none}
+.edu-pop-table.head-color tr:last-child td {border: none}
+/*--表格行间隔背景颜色-*/
+.edu-pop-table.interval-td thead tr{background: #fafbfb}
+.edu-pop-table.interval-td tbody tr:nth-child(even){background: #fafbfb}
+.edu-pop-table.interval-td tbody tr td{border: none}
+/*--表格行间隔背景颜色(th也没有边框)-*/
+.edu-pop-table.interval-all{border:none}
+.edu-pop-table.interval-all thead th{border: none}
+.edu-pop-table.interval-all thead tr{background: #fafbfb}
+.edu-pop-table.interval-all tbody tr:nth-child(even){background: #fafbfb}
+.edu-pop-table.interval-all tbody tr td{border: none;padding:5px 0px}
+/*--表格行移入背景颜色-*/
+.edu-pop-table.hover-td tbody tr:hover{background: #EFF9FD}/*悬浮颜色为天蓝色*/
+.edu-pop-table.hover-td_1 tbody tr:hover{background:#FCF2EC}/*悬浮颜色为浅橙色*/
+/* table-2全边框 */
+.edu-pop-table-all{ width: 100%; border:1px solid #eee; background:#fff; color:#888;border-collapse: collapse}
+.edu-pop-table-all tr{ height:30px; }
+.edu-pop-table-all tr.edu-bg-grey{ background:#f5f5f5;}
+.edu-pop-table-all tr th{ color:#333;border:1px solid #eee; }
+.edu-pop-table-all tr td{border:1px solid #eee;padding: 5px}
+
+
+
+.edu-line{ border-bottom:1px solid #eee;}
+table.table-th-grey th{ background:#f5f5f5;}
+table.table-pa5 th,table.table-pa5 td{ padding:0 5px;}
+.panel-comment_item .orig_cont-red{ border:solid 2px #cc0000; border-radius:10px; padding:4px;color:#999;margin-top:-1px; }
+/***** loading ******/
+/***** Ajax indicator ******/
+#ajax-indicator {
+ position: absolute; /* fixed not supported by IE*/
+ background-color:#eee;
+ border: 1px solid #bbb;
+ top:35%;
+ left:40%;
+ width:20%;
+ /*height:5%;*/
+ font-weight:bold;
+ text-align:center;
+ padding:0.6em;
+ z-index:100000;
+ opacity: 0.5;
+}
+
+html>body #ajax-indicator { position: fixed; }
+
+#ajax-indicator span{
+ color:#fff;
+ color: #333333;
+ background-position: 0% 40%;
+ background-repeat: no-repeat;
+ background-image: url(/images/loading.gif);
+ padding-left: 26px;
+ vertical-align: bottom;
+ z-index:100000;
+}
+
+
+/*----------------------列表结构*/
+.forum_table .forum_table_item:nth-child(odd){background: #fafbfb}
+.forum_table_item{padding: 20px 15px;display: flex;}
+.forum_table_item .item_name{color: #333}
+.forum_table_item .item_name:hover{color: #FF7500}
+
+
+.edu-bg{ background:#fff;}
+/*---------tab切换-----*/
+.task-tab{width:10%;height:42px;line-height:42px;text-align:center;color:#666;
+ position:relative;cursor:pointer;}
+.task-tab.sheet{border-bottom:3px solid #5faee3;color:#5faee3;}
+.task-tab.bold{border-bottom:3px solid #5faee3;font-weight:bold;}
+.task-tab i{position:absolute;bottom:-9px;left:45%;color:#5faee3 !important;}
+
+.undis {display: none}
+.edu-change .panel-form-label{ line-height:1.9;}
+
+.title_type { line-height: 40px;height: 40px;border-bottom: 1px solid #eee;color: #666;padding-left: 15px; }
+.teacher_banner {border-bottom: 1px solid #eee}
+.zbg { background: url("/images/edu_user/richEditer.png") -195px -2px no-repeat; height: 18px; cursor: pointer}
+.zbg_latex { background: url("/images/edu_user/richEditer.png") -315px -3px no-repeat;height: 18px;cursor: pointer;}
+.latex{position:relative;top: 4px;}
+
+.white_bg {background: #fff}
+.user_tab_type {background: #FF6610}
+
+/*首页----------筛选切换(有数字)*/
+.user_course_filtrate{width: auto;text-align: center;line-height: 26px;}
+.user_filtrate_span1_bg{color: #FF7500}
+.user_filtrate_span2{width: auto;padding: 0px 6px;border-radius: 8px;background: #ccc;font-size: 12px;display: block;line-height: 15px;float: right;color: #FFFFFF; margin-top: 6px;}
+.user_filtrate_span2_bg{background: #FF7500!important;}
+.user_course_filtrate:hover .user_filtrate_span1{color: #FF7500!important;}
+.user_course_filtrate:hover .user_filtrate_span2{background: #FF7500!important;}
+/*课堂----------筛选切换(没有数字,默认白色背景)*/
+.course_filtrate{width: auto;padding:0px 10px;text-align: center;background: #eeeeee;border-radius: 10px;margin-right: 20px;line-height: 26px;}
+.course_filtrate:hover{background: #FF7500; color: #ffffff; }
+.course_filtrate_bg{background: #FF7500; color: #ffffff!important; }
+/*我的课堂----------筛选切换(没有数字,默认灰色背景)*/
+.edu-filter-cir-grey{color: #666!important;width: auto;padding:0px 15px;text-align: center;background: #f3f3f3;border-radius: 10px;display: block; height:25px; line-height:25px;}
+.edu-filter-cir-grey:hover{background: #FF7500; color: #ffffff!important;}
+.edu-filter-cir-grey.active{background: #FF7500; color: #ffffff!important;}
+
+.edu-find .edu-find-input{border-bottom: 1px solid #EEEEEE;}
+.edu-find .edu-find-input input{border: none;outline: none}
+.edu-find .edu-close{position: absolute;top: -1px;right: 7px;font-size: 18px;cursor: pointer;}
+.edu-find .edu-open{position: absolute;top: 1px;right: -18px}
+
+
+/*最新和最热导航条的公用样式*/
+.nav_check_item{margin-bottom:13px;border-bottom: 2px solid #FC7033;}
+.nav_check_item li{width:auto;width: 80px;text-align: center;cursor: pointer;height: 38px;line-height: 38px;border-top-right-radius:5px;border-top-left-radius:5px;}
+.nav_check_item li a{display: block;width: 100%;}
+
+.check_nav{background: #FC7033;color: #ffffff;}
+.check_nav a{color: #ffffff !important;}
+
+/*实训列表块里面的遮罩效果*/
+.black-half{position: absolute;left: 0;top:0px;width: 100%;height: 100%;background: rgba(0,0,0,0.4);z-index: 3;display: none;}
+.black-half-lock{width: 65px;height: 65px;border-radius: 50%;background:#8291a3;vertical-align: middle;text-align: center;margin:25% auto 0px;}
+.black-half-lock i{margin-top: 7px;}
+.black-half-info{width: 100%;text-align: center;color: #FFFFFF;margin-top:10px}
+.show-black{display: block;animation: black-down 1s linear 1;}
+@-webkit-keyframes black-down {
+ 25% {-webkit-transform: translateY(0);}
+ 50%, 100% {-webkit-transform: translateY(0);}
+}
+
+@keyframes black-down {
+ 25% {transform: translateY(0);}
+ 50%, 100% {transform: translateY(0);}
+}
+
+/*去掉IE input框输入时自带的清除按钮*/
+input::-ms-clear{display:none;}
+
+
+/*最小高度*/
+.mh750{min-height: 750px}
+.mh650{min-height: 650px}
+.mh580{min-height: 580px}
+.mh550{min-height: 550px}
+.mh510{min-height: 510px}
+.mh440{min-height: 440px}
+.mh400{min-height: 400px}
+.mh390{min-height: 390px}
+.mh360{min-height: 360px}
+.mh350{min-height: 350px}
+.mh320{min-height: 320px}
+.mh240{min-height: 240px}
+.mh200{min-height: 200px}
+
+/*---------------操作部分虚线边框-----------------*/
+.border-dash-orange{border: 1px dashed #ffbfaa}
+/*错误、危险、失败提示边框*/
+.border-error-result{border:1px dashed #ff5252}
+
+.border-dash-ccc{border-top:1px dashed #ccc;border-bottom:1px dashed #ccc;}
+
+.login-error{border:1px solid #ff5252!important;}/*登录时,输入的手机号码或者密码错误,边框变红*/
+.error-red{border: 1px solid #DB6666;background: #FFE6E5;border-radius: 3px;padding: 2px 10px;}
+.error-red i{color: #FF6666}
+
+
+/*---------------tab公用背景颜色-----------------*/
+.background-blue{background:#5ECFBA!important;}
+.background-orange{background: #FC7033!important;}
+.back-orange-main{background: #FC7500!important;color:#FFFFff!important;}/*主流橙色*/
+.back-orange-01{background: #FF9e6a!important;}/*带背景标题、带色彩分割线和操作入口*/
+.back-f6-grey{background: #F6F6F6;}
+.background-blue a{color:#ffffff!important;}
+.background-orange a{color: #ffffff!important;}
+/*---------------tab公用边框-----------------*/
+.border-bottom-orange{border-bottom: 2px solid #FC7033!important;}
+.bor-bottom-orange{border-bottom: 1px solid #FF9e6a!important;}
+.bor-bottom-greyE{border-bottom: 1px solid #EEEEEE!important;}
+.bor-top-greyE{border-top: 1px solid #EEEEEE!important;}
+/*---------------边框-----------------*/
+.bor-gray-c{border:1px solid #ccc;}
+.bor-grey-e{border:1px solid #eee;}
+.bor-grey-d{border:1px solid #ddd;}
+.bor-grey01{border:1px solid #E6EAEB;}
+.bor-orange{border:1px solid #FF7500;}
+.bor-blue{border:1px solid #5faee3;}
+.bor-red{border:1px solid #db0505;}
+.bor-none{border:none;}
+.bor-outnone{outline:none; border:0px;}
+/*延时*/
+.delay{border:1px solid #db0505;padding: 0px 10px;height: 23px;line-height: 23px;border-radius: 12px;display: block;float: left;color:#db0505 }
+
+/*-------------------------圆角-------------------------*/
+.bor-radius-upper{border-radius: 4px 4px 0px 0px;}
+.bor-radius4{border-radius: 4px;}
+.bor-radius20{border-radius: 20px;}
+.bor-radius-all{border-radius: 50%;}
+
+/*-------------------------旋转-------------------------*/
+.transform90{transform: rotate(90deg);}
+/*---------------------编辑器边框------------------------*/
+.kindeditor{background: #F0F0EE;height:22px;border:1px solid #CCCCCC;border-bottom: none}
+
+/*文本框只有下边框*/
+.other_input{border: none;border-bottom: 1px solid #aaa;outline: none}
+/*两端对齐*/
+.justify{text-align: justify!important;}
+
+/**/
+#edu-tab-nav .edu-position-hidebox li a{font-size: 12px}
+/*在线课堂*/
+.courseRefer{float:left; max-height:120px;margin-bottom:10px;overflow:auto; overflow-x:hidden;}
+.logo {width: 295px;height: 30px;border-style:none;position: absolute;top:50%;left:39%;}
+/**/
+.task-header-info .fork{font-weight:bold;font-size:14px;color:#666;}
+
+
+.memos_con a{color: #3b94d6!important;}
+.memos_con ul li{ list-style-type: disc!important; }
+.memos_con ol li{ list-style-type: decimal!important; }
+.memos_con li{ margin-bottom: 0!important; }
+.memos_con pre {overflow-x: auto;}
+
+/*详情a标签默认显示样式*/
+.a_default_show a{color: #136ec2!important}
+
+/*消息机制右侧小三角*/
+.tiding{width: 100%;height: 50px ;position: relative}
+.triangle {position: absolute;right: -1px;top:0px;width: 0;height: 0;border-top: 35px solid #29bd8b;border-left: 60px solid transparent;z-index: 1}
+.triangle-new{position: absolute;right: 1px;top: 0px;z-index: 2;font-size: 14px;color: white;transform: rotate(30deg);}
+.forum_news_list_item{padding: 15px 20px;}
+.forum_news_list_item:nth-child(odd){background-color:#FAFBFB }
+.listItem_right{line-height: 45px;float: right;max-width: 100px;margin-right: 15px;color: #888888}
+.listItem_middle{max-width: 980px;}
+.news_fa{font-size: 30px;color: #888;margin: 7px 16px;}
+.tiding_logo{text-align:center;background: #f3f3f3;width: 200px;height: 100px}
+
+.tr-position{position: absolute;left:54%;width: 20px;text-align: center;border: none!important;}
+
+.two_lines_show{ overflow: hidden;text-overflow: ellipsis;display: -webkit-box;-webkit-line-clamp: 2;-webkit-box-orient: vertical;height: 60px; word-wrap: break-word;}
+.two_lines_show_my{ overflow: hidden;text-overflow: ellipsis;display: -webkit-box;-webkit-line-clamp: 2;-webkit-box-orient: vertical;height: 40px; word-wrap: break-word;}
+.three_lines_show{ overflow: hidden;text-overflow: ellipsis;display: -webkit-box;-webkit-line-clamp: 3;-webkit-box-orient: vertical;height: 66px;line-height: 22px; word-wrap: break-word;}
+
+/*新版讨论区*/
+.discuss-tab a:hover{border-bottom: 2px solid #FC7033!important; color:#000;}
+.discuss-lh40{ line-height:40px;}.discuss-lh16{ line-height:16px}.discuss-lh20{ line-height:20px;}.discuss-lh20{ line-height:20px;}.discuss-lh30{ line-height:30px;}.discuss-lh50{ line-height:50px;}.discuss-lh60{line-height:60px}.discuss-lh80{line-height:80px;}.discuss-lh100{line-height:100px;}
+.discuss-bor-l{ border-left:4px solid #ff7500;}
+.page-turn:hover{background:#fff; color:#FF7500;}
+
+/*实训路径/镜像类别图片*/
+.hor-ver-center{width:80px; height:80px; position:absolute; left:50%; top:50%; margin-left:-40px; margin-top:-40px;}
+.hor-ver-center100{width:100px; height:100px; position:absolute; left:50%;top:25%; margin-left:-50px; margin-top:-25px;}
+.mirror-shade{ background: rgba(0,0,0,0.4); z-index: 3; display:none;}
+
+.position20{position:absolute; top:-60px; left:7%;}
+
+/*--------TA的主页、关注*/
+.user_watch{width: 78px;padding: 2px 0px!important;}
+
+
+/*-------------主页块的背景颜色----------------*/
+.edu-index-bg-green{ background:#5bcab1;}
+.edu-index-bg-blue{ background:#75b9de;}
+.edu-index-bg-purple{ background:#8f97df;}
+.edu-index-bg-yellow{ background:#f7bb74;}
+.edu-index-bg-orange{ background:#e48a81;}
+
+.bor-reds{
+ border:1px solid #FF0000!important;
+ border-radius: 4px;
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+ border-bottom-right-radius: 4px;
+ border-bottom-left-radius: 4px;
+}
diff --git a/spec/models/inform_spec.rb b/spec/models/inform_spec.rb
new file mode 100644
index 000000000..0bcf9eceb
--- /dev/null
+++ b/spec/models/inform_spec.rb
@@ -0,0 +1,5 @@
+require 'rails_helper'
+
+RSpec.describe Inform, type: :model do
+ pending "add some examples to (or delete) #{__FILE__}"
+end
diff --git a/spec/models/partner_spec.rb b/spec/models/partner_spec.rb
new file mode 100644
index 000000000..06cff9d9f
--- /dev/null
+++ b/spec/models/partner_spec.rb
@@ -0,0 +1,5 @@
+require 'rails_helper'
+
+RSpec.describe Partner, type: :model do
+ pending "add some examples to (or delete) #{__FILE__}"
+end