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:
+
TA的作品将被删除
+
是否确认删除?
+
, + 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?
    -
    this.moveup(item)}>
    -
    this.movedown(item)}>
    + {key!=0?
    this.moveup(item)}>
    :""} + {key+1!=detailInfoList.members.length?
    this.movedown(item)}>
    :""}
    :"" } 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