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

dev_hs
cxt 6 years ago
commit 8f19e8bc88

@ -12,7 +12,7 @@ class CoursesController < ApplicationController
end end
before_action :require_login, except: [:index, :show, :students, :teachers, :board_list, :mine, :all_course_groups, before_action :require_login, except: [:index, :show, :students, :teachers, :board_list, :mine, :all_course_groups,
:left_banner, :top_banner] :left_banner, :top_banner, :informs, :online_learning]
before_action :check_account, only: [:new, :create, :apply_to_join_course, :join_excellent_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, 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] :left_banner, :top_banner, :apply_to_join_course, :exit_course]
@ -26,18 +26,22 @@ class CoursesController < ApplicationController
:base_info, :get_historical_courses, :create_group_by_importing_file, :base_info, :get_historical_courses, :create_group_by_importing_file,
:attahcment_category_list,:export_member_scores_excel, :duplicate_course, :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] :informs, :update_informs, :join_excellent_course, :online_learning,
:update_task_position, :tasks_list]
before_action :teacher_allowed, only: [:update, :destroy, :settings, :search_teacher_candidate, before_action :teacher_allowed, only: [:update, :destroy, :settings, :search_teacher_candidate,
:transfer_to_course_group, :delete_from_course, :transfer_to_course_group, :delete_from_course,
:search_users, :add_students_by_search, :get_historical_courses, :add_teacher_popup, :add_teacher] :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, before_action :admin_allowed, only: [:set_invite_code_halt, :set_public_or_private, :change_course_admin,
:set_course_group, :create_group_by_importing_file, :update_informs] :set_course_group, :create_group_by_importing_file, :update_informs,
:update_task_position, :tasks_list]
before_action :teacher_or_admin_allowed, only: [:graduation_group_list, :create_graduation_group, :join_graduation_group, 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, :change_course_teacher, :export_member_scores_excel, :course_group_list,
:teacher_application_review, :apply_teachers, :delete_course_teacher] :teacher_application_review, :apply_teachers, :delete_course_teacher]
before_action :validate_course_name, only: [:create, :update] before_action :validate_course_name, only: [:create, :update]
before_action :find_board, only: :board_list before_action :find_board, only: :board_list
before_action :validate_page_size, only: :mine before_action :validate_page_size, only: :mine
before_action :course_tasks, only: [:tasks_list, :update_task_position]
before_action :find_container, only: [:update_task_position]
if RUBY_PLATFORM =~ /linux/ if RUBY_PLATFORM =~ /linux/
require 'simple_xlsx_reader' require 'simple_xlsx_reader'
@ -100,7 +104,12 @@ class CoursesController < ApplicationController
# GET /courses/new # GET /courses/new
def new def new
@course = Course.new @course = Course.new
normal_status("成功") unless params[:subject_id].blank?
subject = Subject.find_by(id: params[:subject_id], excellent: 1)
render :json => {status: 0, course_name: "#{subject&.name}#{subject&.courses&.count.to_i + 1}"}
else
normal_status("成功")
end
end end
# Get /courses/:id/settings # Get /courses/:id/settings
@ -152,7 +161,7 @@ class CoursesController < ApplicationController
end end
rescue => e rescue => e
uid_logger_error(e.message) uid_logger_error(e.message)
tip_exception("课堂创建失败!") tip_exception(e.message)
raise ActiveRecord::Rollback raise ActiveRecord::Rollback
end end
end end
@ -1117,6 +1126,44 @@ class CoursesController < ApplicationController
render_ok(count: count, courses: courses.select(:id, :name).as_json) render_ok(count: count, courses: courses.select(:id, :name).as_json)
end end
def tasks_list
case params[:container_type]
when 'shixun_homework'
@tasks = @course.practice_homeworks
when 'common_homework'
@tasks = @course.normal_homeworks
when 'group_homework'
@tasks = @course.group_homeworks
when 'exercise'
@tasks = @course.exercises
when 'poll'
@tasks = @course.polls
when 'graduation_topic'
@tasks = @course.graduation_topics
when 'graduation_task'
@tasks = @course.graduation_tasks
when 'attachment'
@tasks = @course.attachments
else
tip_exception("请指定任务类型")
end
end
def update_task_position
tip_exception("缺少position参数") if params[:position].blank?
unless params[:position].to_i == @task.position
if params[:position].to_i < @task.position
@tasks.where("position < #{@task.position} and position >= ?", params[:position]).update_all("position = position + 1")
else
@tasks.where("position > #{@task.position} and position <= ?", params[:position]).update_all("position = position - 1")
end
@task.update_attributes(position: params[:position])
normal_status(0, "移动成功")
else
normal_status(-1, "位置没有变化")
end
end
private private
# Use callbacks to share common setup or constraints between actions. # Use callbacks to share common setup or constraints between actions.
@ -1177,6 +1224,48 @@ class CoursesController < ApplicationController
end end
end end
def course_tasks
case params[:container_type]
when 'shixun_homework'
@tasks = @course.practice_homeworks
when 'common_homework'
@tasks = @course.normal_homeworks
when 'group_homework'
@tasks = @course.group_homeworks
when 'exercise'
@tasks = @course.exercises
when 'poll'
@tasks = @course.polls
when 'graduation_topic'
@tasks = @course.graduation_topics
when 'graduation_task'
@tasks = @course.graduation_tasks
when 'attachment'
@tasks = @course.attachments
else
tip_exception("请指定任务类型")
end
end
def find_container
case params[:container_type]
when 'shixun_homework', 'common_homework', 'group_homework'
@task = HomeworkCommon.find_by(id: params[:container_id])
when 'exercise'
@task = Exercise.find_by(id: params[:container_id])
when 'poll'
@task = Poll.find_by(id: params[:container_id])
when 'graduation_topic'
@task = GraduationTopic.find_by(id: params[:container_id])
when 'graduation_task'
@task = GraduationTask.find_by(id: params[:container_id])
when 'attachment'
@task = Attachment.find_by(id: params[:container_id])
else
tip_exception("container_type参数有误")
end
end
def student_act_score group_id, search def student_act_score group_id, search
sql_select = %Q{SELECT cm.*,( sql_select = %Q{SELECT cm.*,(
SELECT SUM(student_works.work_score) SELECT SUM(student_works.work_score)

@ -37,8 +37,6 @@ class HomeworkCommonsController < ApplicationController
@category = @main_category.course_second_categories.find_by(id: params[:category]) @category = @main_category.course_second_categories.find_by(id: params[:category])
tip_exception("子目录id有误") if !@category.present? tip_exception("子目录id有误") if !@category.present?
@homework_commons = @homework_commons.where(course_second_category_id: params[:category]) @homework_commons = @homework_commons.where(course_second_category_id: params[:category])
elsif @homework_type == 4
@homework_commons = @homework_commons
end end
@all_count = @homework_commons.size @all_count = @homework_commons.size

@ -563,15 +563,15 @@ class ShixunsController < ApplicationController
end end
# 如果该实训是金课中的实训,则将当前用户加入到当期开课的课堂 # 如果该实训是金课中的实训,则将当前用户加入到当期开课的课堂
# if StageShixun.exists?(shixun_id: @shixun.id, subject_id: Subject.where(excellent: 1)) if StageShixun.exists?(shixun_id: @shixun.id, subject_id: Subject.where(excellent: 1))
# subject = Subject.where(excellent: 1, id: StageShixun.where(shixun_id: @shixun.id).pluck(:subject_id)).take subject = Subject.find_by(id: StageShixun.where(shixun_id: @shixun.id).pluck(:subject_id), excellent: 1)
# course = subject.courses.where("start_date is not null and start_date <= '#{Date.today}' and end_date is not null and end_date >= '#{Date.today}'").take course = subject.courses.where("start_date is not null and start_date <= '#{Date.today}' and end_date is not null and end_date >= '#{Date.today}'").take
# if course.present? && !CourseMember.exists?(course_id: course.id, user_id: current_user.id) if course.present? && !CourseMember.exists?(course_id: course.id, user_id: current_user.id)
# # 为了不影响后续操作用create而不是create! # 为了不影响后续操作用create而不是create!
# CourseMember.create(course_id: course.id, user_id: current_user.id, role: 4) CourseMember.create(course_id: course.id, user_id: current_user.id, role: 4)
# CourseAddStudentCreateWorksJob.perform_later(course.id, [current_user.id]) CourseAddStudentCreateWorksJob.perform_later(course.id, [current_user.id])
# end end
# end end
ActiveRecord::Base.transaction do ActiveRecord::Base.transaction do
begin begin

@ -1,447 +1,447 @@
class SubjectsController < ApplicationController class SubjectsController < ApplicationController
before_action :require_login, :check_auth, except: [:index, :show, :right_banner] before_action :require_login, :check_auth, except: [:index, :show, :right_banner]
# before_action :check_auth, except: [:index] # before_action :check_auth, except: [:index]
before_action :check_account, except: [:index, :show] before_action :check_account, except: [:index, :show, :right_banner]
before_action :find_subject, except: [:index, :create, :new, :append_to_stage] before_action :find_subject, except: [:index, :create, :new, :append_to_stage]
before_action :allowed, only: [:update, :edit, :destroy, :publish, :cancel_publish, :cancel_has_publish, before_action :allowed, only: [:update, :edit, :destroy, :publish, :cancel_publish, :cancel_has_publish,
:search_members, :add_subject_members, :statistics, :shixun_report, :school_report, :search_members, :add_subject_members, :statistics, :shixun_report, :school_report,
:up_member_position, :down_member_position] :up_member_position, :down_member_position]
include ApplicationHelper include ApplicationHelper
include SubjectsHelper include SubjectsHelper
def index def index
@tech_system = Repertoire.where(nil).order("updated_at desc") @tech_system = Repertoire.where(nil).order("updated_at desc")
select = params[:select] # 路径导航类型 select = params[:select] # 路径导航类型
reorder = params[:order] || "publish_time" reorder = params[:order] || "publish_time"
search = params[:search] search = params[:search]
## 分页参数 ## 分页参数
page = params[:page] || 1 page = params[:page] || 1
limit = params[:limit] || 16 limit = params[:limit] || 16
offset = (page.to_i-1) * limit offset = (page.to_i-1) * limit
# 最热排序 # 最热排序
if reorder == "myshixun_count" if reorder == "myshixun_count"
if select if select
@subjects = Subject.find_by_sql("SELECT subjects.id, subjects.user_id, subjects.name, subjects.stages_count, subjects.repertoire_id, subjects.status, @subjects = Subject.find_by_sql("SELECT subjects.id, subjects.user_id, subjects.name, subjects.stages_count, subjects.repertoire_id, subjects.status,
subjects.shixuns_count, subjects.excellent, 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 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}%' 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") AND subjects.repertoire_id = #{select} GROUP BY subjects.id ORDER BY myshixun_member_count DESC")
else else
@subjects = Subject.find_by_sql("SELECT subjects.id, subjects.user_id, subjects.name, subjects.stages_count, subjects.repertoire_id, subjects.status, @subjects = Subject.find_by_sql("SELECT subjects.id, subjects.user_id, subjects.name, subjects.stages_count, subjects.repertoire_id, subjects.status,
subjects.shixuns_count, subjects.excellent, 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 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}%' subjects.hidden = 0 AND subjects.status = 2 AND subjects.name like '%#{search}%'
GROUP BY subjects.id ORDER BY myshixun_member_count DESC") GROUP BY subjects.id ORDER BY myshixun_member_count DESC")
end end
else else
# 我的路径 # 我的路径
if reorder == "mine" if reorder == "mine"
tip_exception(401, "..") unless current_user.logged? tip_exception(401, "..") unless current_user.logged?
mine_subject_id = StageShixun.find_by_sql("select DISTINCT(subject_id) from stage_shixuns where shixun_id in mine_subject_id = StageShixun.find_by_sql("select DISTINCT(subject_id) from stage_shixuns where shixun_id in
(select distinct(shixun_id) from myshixuns where user_id=#{current_user.id})").map(&:subject_id) (select distinct(shixun_id) from myshixuns where user_id=#{current_user.id})").map(&:subject_id)
manage_subject_id = SubjectMember.where(user_id: current_user.id).pluck(:subject_id) manage_subject_id = SubjectMember.where(user_id: current_user.id).pluck(:subject_id)
total_subject_id = (mine_subject_id + manage_subject_id).uniq total_subject_id = (mine_subject_id + manage_subject_id).uniq
@subjects = Subject.where(id: total_subject_id) @subjects = Subject.where(id: total_subject_id)
elsif reorder == "publish_time" elsif reorder == "publish_time"
@subjects = Subject.unhidden @subjects = Subject.unhidden
else else
@subjects = Subject.visible.unhidden @subjects = Subject.visible.unhidden
end end
# 类型 # 类型
if select if select
@subjects = @subjects.where(repertoire_id: select) @subjects = @subjects.where(repertoire_id: select)
end end
if search.present? if search.present?
@subjects = @subjects.where("name like ?", "%#{search}%") @subjects = @subjects.where("name like ?", "%#{search}%")
end end
# 排序 # 排序
order_str = reorder == "publish_time" ? "status = 2 desc, publish_time asc" : "updated_at desc" order_str = reorder == "publish_time" ? "status = 2 desc, publish_time asc" : "updated_at desc"
@subjects = @subjects.reorder(order_str) @subjects = @subjects.reorder(order_str)
end end
@total_count = @subjects.size @total_count = @subjects.size
if reorder != "myshixun_count" if reorder != "myshixun_count"
@subjects = @subjects.page(page).per(limit).includes(:shixuns, :repertoire) @subjects = @subjects.page(page).per(limit).includes(:shixuns, :repertoire)
else else
@subjects = @subjects[offset, limit] @subjects = @subjects[offset, limit]
subject_ids = @subjects.pluck(:id) subject_ids = @subjects.pluck(:id)
order_ids = subject_ids.size > 0 ? subject_ids.join(',') : -1 order_ids = subject_ids.size > 0 ? subject_ids.join(',') : -1
@subjects = Subject.where(id: subject_ids).order("field(id,#{order_ids})").includes(:shixuns, :repertoire) @subjects = Subject.where(id: subject_ids).order("field(id,#{order_ids})").includes(:shixuns, :repertoire)
end end
end end
def show def show
@user = current_user @user = current_user
@is_creator = current_user.creator_of_subject?(@subject) @is_creator = current_user.creator_of_subject?(@subject)
@is_manager = @user.manager_of_subject?(@subject) @is_manager = @user.manager_of_subject?(@subject)
# 合作团队 # 合作团队
@shixuns = @subject.shixuns.published.pluck(:id) @shixuns = @subject.shixuns.published.pluck(:id)
@courses = @subject.courses if @subject.excellent @courses = @subject.courses if @subject.excellent
@members = @subject.subject_members.includes(:user) @members = @subject.subject_members.includes(:user)
shixuns = @subject.shixuns.published.pluck(:id) shixuns = @subject.shixuns.published.pluck(:id)
challenge_ids = Challenge.where(shixun_id: shixuns).pluck(:id) challenge_ids = Challenge.where(shixun_id: shixuns).pluck(:id)
# 实训路径中的所有实训标签 # 实训路径中的所有实训标签
@tags = ChallengeTag.where(challenge_id: challenge_ids).pluck(:name).uniq @tags = ChallengeTag.where(challenge_id: challenge_ids).pluck(:name).uniq
# 用户获取的实训标签 # 用户获取的实训标签
# @user_tags = @subject.shixuns.map(&:user_tags_name).flatten.uniq # @user_tags = @subject.shixuns.map(&:user_tags_name).flatten.uniq
@user_tags = user_shixun_tags challenge_ids, @user.id @user_tags = user_shixun_tags challenge_ids, @user.id
@my_subject_progress = @subject.my_subject_progress @my_subject_progress = @subject.my_subject_progress
# 访问数变更 # 访问数变更
@subject.increment!(:visits) @subject.increment!(:visits)
end end
def right_banner def right_banner
@user = current_user @user = current_user
# 合作团队 # 合作团队
@members = @subject.subject_members.includes(:user) @members = @subject.subject_members.includes(:user)
shixuns = @subject.shixuns.published.pluck(:id) shixuns = @subject.shixuns.published.pluck(:id)
challenge_ids = Challenge.where(shixun_id: shixuns).pluck(:id) challenge_ids = Challenge.where(shixun_id: shixuns).pluck(:id)
# 实训路径中的所有实训标签 # 实训路径中的所有实训标签
@tags = ChallengeTag.where(challenge_id: challenge_ids).pluck(:name).uniq @tags = ChallengeTag.where(challenge_id: challenge_ids).pluck(:name).uniq
# 用户获取的实训标签 # 用户获取的实训标签
# @user_tags = @subject.shixuns.map(&:user_tags_name).flatten.uniq # @user_tags = @subject.shixuns.map(&:user_tags_name).flatten.uniq
@user_tags = user_shixun_tags challenge_ids, @user.id @user_tags = user_shixun_tags challenge_ids, @user.id
@my_subject_progress = @subject.my_subject_progress @my_subject_progress = @subject.my_subject_progress
end end
def new def new
normal_status("") normal_status("")
end end
def create def create
ActiveRecord::Base.transaction do ActiveRecord::Base.transaction do
begin begin
@subject = Subject.new(subject_params) @subject = Subject.new(subject_params)
@subject.user_id = current_user.id @subject.user_id = current_user.id
@subject.save! @subject.save!
@subject.subject_members.create!(role: 1, user_id: current_user.id) @subject.subject_members.create!(role: 1, user_id: current_user.id)
rescue Exception => e rescue Exception => e
uid_logger_error(e.message) uid_logger_error(e.message)
tip_exception("实训路径创建失败") tip_exception("实训路径创建失败")
raise ActiveRecord::Rollback raise ActiveRecord::Rollback
end end
end end
end end
def edit def edit
end end
def update def update
begin begin
@subject.update_attributes(subject_params) @subject.update_attributes(subject_params)
rescue Exception => e rescue Exception => e
uid_logger_error(e.message) uid_logger_error(e.message)
tip_exception("实训路径更新失败") tip_exception("实训路径更新失败")
raise ActiveRecord::Rollback raise ActiveRecord::Rollback
end end
end end
def destroy def destroy
ActiveRecord::Base.transaction do ActiveRecord::Base.transaction do
begin begin
ApplyAction.where(container_type: "ApplySubject", container_id: @subject.id).destroy_all ApplyAction.where(container_type: "ApplySubject", container_id: @subject.id).destroy_all
@subject.destroy @subject.destroy
rescue Exception => e rescue Exception => e
uid_logger_error(e.message) uid_logger_error(e.message)
tip_exception("实训路径删除失败") tip_exception("实训路径删除失败")
raise ActiveRecord::Rollback raise ActiveRecord::Rollback
end end
end end
end end
def choose_subject_shixun def choose_subject_shixun
@search = params[:search].strip if params[:search] @search = params[:search].strip if params[:search]
@type = params[:type] @type = params[:type]
# 超级管理员用户显示所有未隐藏的实训、非管理员显示合作团队用户的实训(对本单位公开且未隐藏) # 超级管理员用户显示所有未隐藏的实训、非管理员显示合作团队用户的实训(对本单位公开且未隐藏)
if current_user.admin? if current_user.admin?
@shixuns = Shixun.select([:id, :name, :status, :myshixuns_count, :identifier, :averge_star]).where(hidden: 0) @shixuns = Shixun.select([:id, :name, :status, :myshixuns_count, :identifier, :averge_star]).where(hidden: 0)
else else
none_shixun_ids = ShixunSchool.where("school_id != #{current_user.user_extension.try(:school_id).to_i}").pluck(:shixun_id) none_shixun_ids = ShixunSchool.where("school_id != #{current_user.user_extension.try(:school_id).to_i}").pluck(:shixun_id)
@shixuns = Shixun.select([:id, :name, :status, :myshixuns_count, :identifier, :averge_star]).where.not(id: none_shixun_ids).where(hidden: 0) @shixuns = Shixun.select([:id, :name, :status, :myshixuns_count, :identifier, :averge_star]).where.not(id: none_shixun_ids).where(hidden: 0)
end end
# 实训课程的所有标签 # 实训课程的所有标签
tag_ids = @shixuns.joins(:shixun_tag_repertoires).pluck(:tag_repertoire_id).uniq tag_ids = @shixuns.joins(:shixun_tag_repertoires).pluck(:tag_repertoire_id).uniq
@tags = TagRepertoire.select([:id, :name]).where(id: tag_ids) @tags = TagRepertoire.select([:id, :name]).where(id: tag_ids)
unless params[:search].blank? unless params[:search].blank?
@shixuns = @shixuns.joins(:user).where("shixuns.name like ? or concat(users.lastname, users.firstname) like ?", @shixuns = @shixuns.joins(:user).where("shixuns.name like ? or concat(users.lastname, users.firstname) like ?",
"%#{@search}%", "%#{@search}%").distinct "%#{@search}%", "%#{@search}%").distinct
end end
unless @type.nil? || @type == "" || @type == "all" unless @type.nil? || @type == "" || @type == "all"
shixun_ids = ShixunTagRepertoire.where(tag_repertoire_id: @type).pluck(:shixun_id).uniq shixun_ids = ShixunTagRepertoire.where(tag_repertoire_id: @type).pluck(:shixun_id).uniq
@shixuns = @shixuns.where(id: shixun_ids) @shixuns = @shixuns.where(id: shixun_ids)
end end
@shixuns = @shixuns.reorder("created_at desc") @shixuns = @shixuns.reorder("created_at desc")
@shixuns_count = @shixuns.size @shixuns_count = @shixuns.size
## 分页参数 ## 分页参数
page = params[:page] || 1 page = params[:page] || 1
@shixuns = @shixuns.page(page).per(10) @shixuns = @shixuns.page(page).per(10)
@shixuns = @shixuns.includes(:myshixuns) @shixuns = @shixuns.includes(:myshixuns)
end end
def append_to_stage def append_to_stage
@shixuns = Shixun.where(id: params[:shixun_id]).order("id desc") @shixuns = Shixun.where(id: params[:shixun_id]).order("id desc")
end end
def choose_course def choose_course
course_ids = Course.find_by_sql("SELECT c.id FROM courses c, course_members m course_ids = Course.find_by_sql("SELECT c.id FROM courses c, course_members m
WHERE m.course_id = c.id AND m.role in (1,2,3) WHERE m.course_id = c.id AND m.role in (1,2,3)
AND m.user_id=#{current_user.id} AND c.is_delete = 0 AND c.is_end = 0").map(&:id) AND m.user_id=#{current_user.id} AND c.is_delete = 0 AND c.is_end = 0").map(&:id)
@courses = Course.where(id: course_ids) @courses = Course.where(id: course_ids)
@none_shixun_ids = ShixunSchool.where("school_id != #{current_user.user_extension.try(:school_id).to_i}").pluck(:shixun_id) @none_shixun_ids = ShixunSchool.where("school_id != #{current_user.user_extension.try(:school_id).to_i}").pluck(:shixun_id)
end end
def send_to_course def send_to_course
@course = Course.find_by!(id: params[:course_id]) @course = Course.find_by!(id: params[:course_id])
stages = @subject.stages.where(id: @subject.stage_shixuns.where(shixun_id: params[:shixun_ids]).pluck(:stage_id)) stages = @subject.stages.where(id: @subject.stage_shixuns.where(shixun_id: params[:shixun_ids]).pluck(:stage_id))
course_module = @course.course_modules.where(module_type: "shixun_homework").first course_module = @course.course_modules.where(module_type: "shixun_homework").first
ActiveRecord::Base.transaction do ActiveRecord::Base.transaction do
begin begin
# 将实训课程下的所有已发布实训按顺序发送到课堂,同时创建与章节同名的实训作业目录 # 将实训课程下的所有已发布实训按顺序发送到课堂,同时创建与章节同名的实训作业目录
stages.each do |stage| stages.each do |stage|
category = CourseSecondCategory.where(name: stage.name, course_id: @course.id, category_type: "shixun_homework").first || category = CourseSecondCategory.where(name: stage.name, course_id: @course.id, category_type: "shixun_homework").first ||
CourseSecondCategory.create!(name: stage.name, course_id: @course.id, category_type: "shixun_homework", CourseSecondCategory.create!(name: stage.name, course_id: @course.id, category_type: "shixun_homework",
course_module_id: course_module.id, position: course_module.course_second_categories.count + 1) course_module_id: course_module.id, position: course_module.course_second_categories.count + 1)
stage.shixuns.where(id: params[:shixun_ids], status: 2).each do |shixun| stage.shixuns.where(id: params[:shixun_ids], status: 2).each do |shixun|
homework = HomeworksService.new.create_homework shixun, @course, category, current_user homework = HomeworksService.new.create_homework shixun, @course, category, current_user
end end
end end
rescue Exception => e rescue Exception => e
uid_logger(e.message) uid_logger(e.message)
tip_exception(e.message) tip_exception(e.message)
raise ActiveRecord::Rollback raise ActiveRecord::Rollback
end end
end end
end end
def publish def publish
apply = ApplyAction.where(container_type: "ApplySubject", container_id: @subject.id).order("created_at desc").first apply = ApplyAction.where(container_type: "ApplySubject", container_id: @subject.id).order("created_at desc").first
if apply && apply.status == 0 if apply && apply.status == 0
@status = 0 @status = 0
else else
@subject.update_attributes(status: 1) @subject.update_attributes(status: 1)
ApplyAction.create(container_type: "ApplySubject", container_id: @subject.id, user_id: current_user.id, status: 0) ApplyAction.create(container_type: "ApplySubject", container_id: @subject.id, user_id: current_user.id, status: 0)
begin begin
status = Educoder::Sms.send(mobile: '18711011226', send_type:'publish_subject' , name: '管理员') status = Educoder::Sms.send(mobile: '18711011226', send_type:'publish_subject' , name: '管理员')
rescue => e rescue => e
uid_logger_error("发送验证码出错: #{e}") uid_logger_error("发送验证码出错: #{e}")
end end
@status = 1 @status = 1
end end
end end
def cancel_publish def cancel_publish
begin begin
apply = ApplyAction.where(container_type: "ApplySubject", container_id: @subject.id).order("created_at desc").first apply = ApplyAction.where(container_type: "ApplySubject", container_id: @subject.id).order("created_at desc").first
if apply && apply.status == 0 if apply && apply.status == 0
apply.update_attributes(status: 3) apply.update_attributes(status: 3)
apply.tidings.destroy_all apply.tidings.destroy_all
end end
@subject.update_attributes(status: 0) @subject.update_attributes(status: 0)
rescue => e rescue => e
uid_logger_error(e.message) uid_logger_error(e.message)
tip_exception("撤销申请失败") tip_exception("撤销申请失败")
raise ActiveRecord::Rollback raise ActiveRecord::Rollback
end end
end end
def cancel_has_publish def cancel_has_publish
begin begin
@subject.update_attributes(:status => 0) @subject.update_attributes(:status => 0)
rescue => e rescue => e
uid_logger_error(e.message) uid_logger_error(e.message)
tip_exception("撤销发布失败") tip_exception("撤销发布失败")
raise ActiveRecord::Rollback raise ActiveRecord::Rollback
end end
end end
def search_members def search_members
tip_exception("搜索内容不能为空") unless params[:search] tip_exception("搜索内容不能为空") unless params[:search]
page = params[:page] || 1 page = params[:page] || 1
member_ids = @subject.subject_members.map(&:user_id).join(',') member_ids = @subject.subject_members.map(&:user_id).join(',')
condition = "%#{params[:search].strip}%".gsub(" ","") condition = "%#{params[:search].strip}%".gsub(" ","")
@users = User.where("id not in (?) and status = 1 and LOWER(concat(lastname, firstname, login, mail)) LIKE ?", member_ids, "#{condition}") @users = User.where("id not in (?) and status = 1 and LOWER(concat(lastname, firstname, login, mail)) LIKE ?", member_ids, "#{condition}")
@users = @users.page(page).per(10) @users = @users.page(page).per(10)
@users = @users.includes(:user_extension) @users = @users.includes(:user_extension)
end end
def add_subject_members def add_subject_members
# tip_exception(403, "没权限操作") if !current_user.admin? # tip_exception(403, "没权限操作") if !current_user.admin?
tip_exception("user_ids 不能为空!") if params[:user_ids].blank? tip_exception("user_ids 不能为空!") if params[:user_ids].blank?
memberships = params[:user_ids] memberships = params[:user_ids]
memberships.each do |member| memberships.each do |member|
if SubjectMember.where(user_id: member, subject_id: @subject.id).count == 0 if SubjectMember.where(user_id: member, subject_id: @subject.id).count == 0
user = User.find_by!(id: member) user = User.find_by!(id: member)
SubjectMember.create!(user_id: member, subject_id: @subject.id, role: 2, position: @subject.subject_members.size + 1) if user.present? SubjectMember.create!(user_id: member, subject_id: @subject.id, role: 2, position: @subject.subject_members.size + 1) if user.present?
end end
end end
end end
# 删除实训 # 删除实训
# DELETE: /api/subejcts/:id/delete_member # DELETE: /api/subejcts/:id/delete_member
def delete_member def delete_member
tip_exception(403, "没权限操作") unless current_user.manager_of_subject?(@subject) tip_exception(403, "没权限操作") unless current_user.manager_of_subject?(@subject)
tip_exception('用户id不能为空') if params[:user_id].blank? tip_exception('用户id不能为空') if params[:user_id].blank?
user = @subject.subject_members.where(:user_id => params[:user_id], :role => 2).first user = @subject.subject_members.where(:user_id => params[:user_id], :role => 2).first
tip_exception("管理员用户不允许删除,或用户不存在") if user.blank? tip_exception("管理员用户不允许删除,或用户不存在") if user.blank?
ActiveRecord::Base.transaction do ActiveRecord::Base.transaction do
begin begin
@subject.subject_members.where("position > #{user.position}").update_all("position = position - 1") @subject.subject_members.where("position > #{user.position}").update_all("position = position - 1")
user.destroy user.destroy
rescue Exception => e rescue Exception => e
uid_logger_error(e.message) uid_logger_error(e.message)
tip_exception(e.message) tip_exception(e.message)
raise ActiveRecord::Rollback raise ActiveRecord::Rollback
end end
end end
end end
# 合作者上移 # 合作者上移
def up_member_position def up_member_position
tip_exception('用户id不能为空') if params[:user_id].blank? tip_exception('用户id不能为空') if params[:user_id].blank?
ActiveRecord::Base.transaction do ActiveRecord::Base.transaction do
begin begin
member = @subject.subject_members.where(user_id: params[:user_id]).first member = @subject.subject_members.where(user_id: params[:user_id]).first
# position为1时不能再往上移 # position为1时不能再往上移
tip_exception('不能再上移了') if member.position == 1 tip_exception('不能再上移了') if member.position == 1
up_member = @subject.subject_members.where(position: member.position - 1).first up_member = @subject.subject_members.where(position: member.position - 1).first
up_member.update_attribute(:position, member.position) up_member.update_attribute(:position, member.position)
member.update_attribute(:position, member.position - 1) member.update_attribute(:position, member.position - 1)
rescue Exception => e rescue Exception => e
uid_logger_error(e.message) uid_logger_error(e.message)
tip_exception(e.message) tip_exception(e.message)
raise ActiveRecord::Rollback raise ActiveRecord::Rollback
end end
end end
end end
# 合作者下移 # 合作者下移
def down_member_position def down_member_position
tip_exception('用户id不能为空') if params[:user_id].blank? tip_exception('用户id不能为空') if params[:user_id].blank?
ActiveRecord::Base.transaction do ActiveRecord::Base.transaction do
begin begin
member = @subject.subject_members.where(user_id: params[:user_id]).first member = @subject.subject_members.where(user_id: params[:user_id]).first
# position已经是最大值时不能再往下移 # position已经是最大值时不能再往下移
tip_exception('不能再下移了') if member.position == @subject.subject_members.size tip_exception('不能再下移了') if member.position == @subject.subject_members.size
down_member = @subject.subject_members.where(:position => member.position + 1).first down_member = @subject.subject_members.where(:position => member.position + 1).first
down_member.update_attribute(:position, member.position) down_member.update_attribute(:position, member.position)
member.update_attribute(:position, member.position + 1) member.update_attribute(:position, member.position + 1)
rescue Exception => e rescue Exception => e
uid_logger_error(e.message) uid_logger_error(e.message)
tip_exception(e.message) tip_exception(e.message)
raise ActiveRecord::Rollback raise ActiveRecord::Rollback
end end
end end
end end
def statistics def statistics
@learn_count = @subject.member_count @learn_count = @subject.member_count
shixun_ids = @subject.stage_shixuns.pluck(:shixun_id) shixun_ids = @subject.stage_shixuns.pluck(:shixun_id)
# 受用课堂(已经发布的实训(在此路径中的实训)作业的个数) # 受用课堂(已经发布的实训(在此路径中的实训)作业的个数)
homework_common_id = HomeworkCommonsShixun.where(shixun_id: shixun_ids).pluck(:homework_common_id).uniq homework_common_id = HomeworkCommonsShixun.where(shixun_id: shixun_ids).pluck(:homework_common_id).uniq
homework_common_id = homework_common_id.blank? ? -1 : homework_common_id.join(",") homework_common_id = homework_common_id.blank? ? -1 : homework_common_id.join(",")
courses = Course.find_by_sql("select c.id, c.school_id from courses c right join homework_commons hc on c.id = hc.course_id where c.is_delete = 0 courses = Course.find_by_sql("select c.id, c.school_id from courses c right join homework_commons hc on c.id = hc.course_id where c.is_delete = 0
and c.school_id is not null and hc.publish_time < '#{Time.now}' and hc.id in (#{(homework_common_id)})") and c.school_id is not null and hc.publish_time < '#{Time.now}' and hc.id in (#{(homework_common_id)})")
course_ids = courses.pluck(:id).uniq course_ids = courses.pluck(:id).uniq
@course_count = course_ids.length @course_count = course_ids.length
# 受用院校 # 受用院校
school_ids = courses.pluck(:school_id).uniq school_ids = courses.pluck(:school_id).uniq
@schools_count = school_ids.length @schools_count = school_ids.length
# 采用课堂情况 # 采用课堂情况
@schools = School.select([:id, :name]).where(id: school_ids) @schools = School.select([:id, :name]).where(id: school_ids)
@schools = @schools =
@schools.map do |s| @schools.map do |s|
school_courses = Course.where(id: course_ids, school_id: s.id) school_courses = Course.where(id: course_ids, school_id: s.id)
course_count = school_courses.count course_count = school_courses.count
student_count = StudentsForCourse.where(course_id: school_courses.pluck(:id)).count student_count = StudentsForCourse.where(course_id: school_courses.pluck(:id)).count
homework_count = HomeworkCommon.find_by_sql("select count(*) cnt from homework_commons hc join courses c on hc.course_id = c.id homework_count = HomeworkCommon.find_by_sql("select count(*) cnt from homework_commons hc join courses c on hc.course_id = c.id
where c.school_id = #{s.id} and hc.id in(#{homework_common_id})").first.try(:cnt) where c.school_id = #{s.id} and hc.id in(#{homework_common_id})").first.try(:cnt)
s.attributes.dup.merge({name: s.name, course_count: course_count, student_count: student_count,homework_count: homework_count}) s.attributes.dup.merge({name: s.name, course_count: course_count, student_count: student_count,homework_count: homework_count})
end end
@schools = @schools.sort{|x,y| y['homework_count'] <=> x['homework_count']} @schools = @schools.sort{|x,y| y['homework_count'] <=> x['homework_count']}
@school_total_count = @schools.size @school_total_count = @schools.size
page = params[:page] || 1 page = params[:page] || 1
@schools = @schools[(page.to_i-1)*10, 10] @schools = @schools[(page.to_i-1)*10, 10]
# TODO: 这个可以异步加载,让页面刷新完成后再加载图形数据 # TODO: 这个可以异步加载,让页面刷新完成后再加载图形数据
# 章节使用情况 # 章节使用情况
@stage_user_info = [] @stage_user_info = []
@sum = 0 #总数 @sum = 0 #总数
@subject.stages.includes(:stage_shixuns).each do |stage| @subject.stages.includes(:stage_shixuns).each do |stage|
shixun_ids = stage.stage_shixuns.pluck(:shixun_id) shixun_ids = stage.stage_shixuns.pluck(:shixun_id)
if shixun_ids.present? if shixun_ids.present?
homework_common_id = HomeworkCommonsShixun.where(shixun_id: shixun_ids).pluck(:homework_common_id).uniq homework_common_id = HomeworkCommonsShixun.where(shixun_id: shixun_ids).pluck(:homework_common_id).uniq
if homework_common_id.present? if homework_common_id.present?
publish_homework = HomeworkDetailManual.where("homework_common_id in(?) and comment_status > 0", homework_common_id.join(",")).pluck(:homework_common_id) publish_homework = HomeworkDetailManual.where("homework_common_id in(?) and comment_status > 0", homework_common_id.join(",")).pluck(:homework_common_id)
use_count = publish_homework.present? ? HomeworkCommon.find_by_sql("select count(*) cnt from homework_commons hc join courses c on hc.course_id = c.id use_count = publish_homework.present? ? HomeworkCommon.find_by_sql("select count(*) cnt from homework_commons hc join courses c on hc.course_id = c.id
where hc.id in(#{publish_homework.join(",")}) and c.school_id is not null").first.try(:cnt) : 0 where hc.id in(#{publish_homework.join(",")}) and c.school_id is not null").first.try(:cnt) : 0
@sum += use_count @sum += use_count
else else
@sum += 0 @sum += 0
use_count = 0 use_count = 0
end end
@stage_user_info << use_count @stage_user_info << use_count
else else
@sum += 0 @sum += 0
@stage_user_info << 0 @stage_user_info << 0
end end
end end
end end
def shixun_report def shixun_report
end end
def school_report def school_report
@schools = School.find_by_sql("select count(ms.id) ue_count, s.id, s.name school_name from user_extensions ue, @schools = School.find_by_sql("select count(ms.id) ue_count, s.id, s.name school_name from user_extensions ue,
myshixuns ms, schools s where ue.user_id = ms.user_id and ms.shixun_id in (select shixun_id from myshixuns ms, schools s where ue.user_id = ms.user_id and ms.shixun_id in (select shixun_id from
stage_shixuns where subject_id = '#{@subject.id}') and s.id = ue.school_id group by ue.school_id stage_shixuns where subject_id = '#{@subject.id}') and s.id = ue.school_id group by ue.school_id
order by ue_count desc limit 10") order by ue_count desc limit 10")
end end
private private
def subject_params def subject_params
tip_exception("实训路径名称不能为空") if params[:name].blank? tip_exception("实训路径名称不能为空") if params[:name].blank?
tip_exception("实训路径简介不能为空") if params[:description].blank? tip_exception("实训路径简介不能为空") if params[:description].blank?
tip_exception("实训路径学习须知不能为空") if params[:learning_notes].blank? tip_exception("实训路径学习须知不能为空") if params[:learning_notes].blank?
params.require(:subject).permit(:name, :description, :learning_notes) params.require(:subject).permit(:name, :description, :learning_notes)
end end
def find_subject def find_subject
@subject = Subject.find_by!(id: params[:id]) @subject = Subject.find_by!(id: params[:id])
unless @subject.status == 2 || current_user.manager_of_subject?(@subject) unless @subject.status == 2 || current_user.manager_of_subject?(@subject)
tip_exception("403", "") tip_exception("403", "")
end end
end end
def allowed def allowed
unless current_user.manager_of_subject?(@subject) unless current_user.manager_of_subject?(@subject)
tip_exception("403", "") tip_exception("403", "")
end end
end end
end end

@ -32,7 +32,12 @@ class Course < ApplicationRecord
has_many :teacher_course_members, -> { teachers_and_admin }, class_name: 'CourseMember' has_many :teacher_course_members, -> { teachers_and_admin }, class_name: 'CourseMember'
has_many :teacher_users, through: :teacher_course_members, source: :user has_many :teacher_users, through: :teacher_course_members, source: :user
has_many :course_messages, dependent: :destroy has_many :course_messages, dependent: :destroy
has_many :homework_commons, dependent: :destroy has_many :homework_commons, dependent: :destroy
has_many :normal_homeworks, -> { normals }, class_name: 'HomeworkCommon'
has_many :group_homeworks, -> { groups }, class_name: 'HomeworkCommon'
has_many :practice_homeworks, -> { practices }, class_name: 'HomeworkCommon'
has_many :homework_group_settings has_many :homework_group_settings
has_many :graduation_works, dependent: :destroy has_many :graduation_works, dependent: :destroy

@ -12,6 +12,7 @@ class HomeworkCommon < ApplicationRecord
belongs_to :course, counter_cache: true belongs_to :course, counter_cache: true
belongs_to :homework_bank, optional: true belongs_to :homework_bank, optional: true
belongs_to :user
has_many :homework_challenge_settings, dependent: :destroy has_many :homework_challenge_settings, dependent: :destroy
has_one :homework_commons_shixun, dependent: :destroy has_one :homework_commons_shixun, dependent: :destroy
@ -48,6 +49,9 @@ class HomeworkCommon < ApplicationRecord
scope :search_homework_type, lambda {|num| where(homework_type:num)} scope :search_homework_type, lambda {|num| where(homework_type:num)}
scope :unified_setting, -> {where("unified_setting = ? ", 1)} scope :unified_setting, -> {where("unified_setting = ? ", 1)}
scope :normals, -> {where(homework_type: %i[normal]).order("position desc")}
scope :groups, -> {where(homework_type: %i[group]).order("position desc")}
scope :practices, -> {where(homework_type: %i[practice]).order("position desc")}
# 是否显示参考答案 # 是否显示参考答案
def view_answer identity, user_id def view_answer identity, user_id

@ -21,7 +21,7 @@ class Subject < ApplicationRecord
# 开放课堂 # 开放课堂
has_many :courses, -> { order("courses.id ASC") } has_many :courses, -> { order("courses.id ASC") }
validates :name, length: { maximum: 40 } validates :name, length: { maximum: 60 }
validates :description, length: { maximum: 5000 } validates :description, length: { maximum: 5000 }
validates :learning_notes, length: { maximum: 500 } validates :learning_notes, length: { maximum: 500 }

@ -0,0 +1,7 @@
json.tasks @tasks.each do |task|
json.user_name task.user.real_name
json.task_id task.id
json.task_name task.name
json.category task.course_second_category&.name
json.position task.position
end

@ -352,6 +352,8 @@ Rails.application.routes.draw do
post 'update_informs' post 'update_informs'
get 'online_learning' get 'online_learning'
post 'join_excellent_course' post 'join_excellent_course'
get 'tasks_list'
post 'update_task_position'
end end
collection do collection do

@ -0,0 +1,13 @@
class MigrateCourseTaskPosition < ActiveRecord::Migration[5.2]
def change
add_column :homework_commons, :position, :integer, :default => 0
Course.find_each do |course|
puts course.id
course.practice_homeworks.order("IF(ISNULL(homework_commons.publish_time),0,1), homework_commons.publish_time DESC,
homework_commons.created_at DESC").reverse.each_with_index do |homework, index|
homework.update_columns(position: index + 1)
end
end
end
end

@ -43,12 +43,18 @@ namespace :sync do
is_test: true is_test: true
} }
user = User.create!(edit_params) user = User.create!(edit_params)
puts "aa" user.password = "edu12345678"
user.save!
UserExtension.create!(user_id: user.id, school_id: 117) UserExtension.create!(user_id: user.id, school_id: 117)
puts i puts i
end end
end end
task :password => :environment do
end
# 随机生成字符 # 随机生成字符
def generate_identifier(container, num) def generate_identifier(container, num)
code = DCODES.sample(num).join code = DCODES.sample(num).join

@ -112,10 +112,26 @@ em.vertical-line{display: inline-block;width: 2px;background: #999;height: 10px}
.smallSquare:nth-child(3n+0){margin-right: 0px;} .smallSquare:nth-child(3n+0){margin-right: 0px;}
.partimg{height: 180px;width: 100%;border-radius: 6px 6px 0px 0px;} .partimg{height: 180px;width: 100%;border-radius: 6px 6px 0px 0px;}
/*块状列表上面的绿色标签*/ /*块状列表上面的绿色标签*/
.tag-green{position: absolute;left: 0px;top:20px;} .tag-green{
.tag-green .tag-name{display: block;width: auto;background-image: url("/images/educoder/tag1.png");background-size: 100% 100%;padding: 0px 8px;color: #fff;float: left;} position: absolute;
.tag-orange{position: absolute;right: 0px;top:20px;} left: 10px;
.tag-orange .tag-name{display: block;width: auto;background-color:#FF6800;background-size: 100% 100%;padding: 0px 8px;color: #fff;float: left;} bottom: 90px;}
.tag-green .tag-name{display: block;width: auto;
/*background-image: url("/images/educoder/tag1.png");*/
background: #000000;
border: 1px solid #fff;
border-radius: 3px;
font-size: 14px;
opacity: 0.56;
background-size: 100% 100%;padding: 0px 8px;color: #fff;float: left;}
.tag-orange{position: absolute;right: 0px;top:12px;}
.tag-orange .tag-name{display: block;width: auto;background-color:#FF6800;
background-size: 100% 100%;padding: 0px 8px;color: #fff;float: left;
height: 28px;
line-height: 28px;
border-top-left-radius: 4px;
border-bottom-left-radius: 4px;
}
/*发送至弹框里的下拉框*/ /*发送至弹框里的下拉框*/
.downSelectOption{position: relative;height: 35px;} .downSelectOption{position: relative;height: 35px;}
.downSelectOption .showOption{background-color: #F4F4F4;border: 1px solid #EAEAEA;width: 100%;padding: 5px 40px 5px 5px;outline: none;height: 100%;box-sizing: border-box;} .downSelectOption .showOption{background-color: #F4F4F4;border: 1px solid #EAEAEA;width: 100%;padding: 5px 40px 5px 5px;outline: none;height: 100%;box-sizing: border-box;}
@ -3423,4 +3439,8 @@ a.singlepublishtwo{
.detail_for_paragraph p{ .detail_for_paragraph p{
white-space: pre-wrap; white-space: pre-wrap;
}
.ant-tooltip{
max-width: 100% !important;
} }

@ -37,4 +37,4 @@ body {
.MuiModal-root-15{ .MuiModal-root-15{
z-index: 1000 !important; z-index: 1000 !important;
} }

@ -828,7 +828,7 @@ class CoursesIndex extends Component{
{/*新建精品课堂*/} {/*新建精品课堂*/}
{/*coursesId 课堂id */} {/*coursesId 课堂id */}
{/*id 是否是私有或者公有*/} {/*id 是否是私有或者公有*/}
<Route path="/courses/:subjectid/newgold/:id" <Route path="/courses/news/:subjectid/newgold/:id"
render={ render={
(props) => (<WrappedCoursesNewAppGoldclass {...this.props} {...props} {...this.state} />) (props) => (<WrappedCoursesNewAppGoldclass {...this.props} {...props} {...this.state} />)
} }

@ -4,7 +4,9 @@ import { WordsBtn,on, off, trigger,markdownToHTML,getImageUrl} from 'educoder';
import './myelearning.css' import './myelearning.css'
import axios from 'axios'; import axios from 'axios';
import YslDetailCards from "./YslDetailCards.js"; import YslDetailCards from "./YslDetailCards.js";
import Jointheclass from '../../modals/Jointheclass' import Jointheclass from '../../modals/Jointheclass';
import LoginDialog from "../../login/LoginDialog";
//在线学习 //在线学习
class Elearning extends Component{ class Elearning extends Component{
constructor(props){ constructor(props){
@ -23,7 +25,8 @@ class Elearning extends Component{
shixunsmessage:"", shixunsmessage:"",
startshixunCombattype:false, startshixunCombattype:false,
isSpins:false, isSpins:false,
userlogin:"",
isRender:false,
} }
} }
@ -58,6 +61,10 @@ class Elearning extends Component{
}) })
}); });
this.setState({
userlogin:this.props.current_user.login,
})
} }
@ -68,6 +75,19 @@ class Elearning extends Component{
}; };
//开始学习 //开始学习
Startlearning=()=>{ Startlearning=()=>{
let {userlogin} = this.state;
if (userlogin === undefined) {
this.setState({
isRender: true
})
return
}
if (userlogin === "") {
this.setState({
isRender: true
})
return;
}
if(this.props.isNotMember()===true){ if(this.props.isNotMember()===true){
this.setState({ this.setState({
yslJointhe:true yslJointhe:true
@ -206,14 +226,30 @@ class Elearning extends Component{
this.setState({ this.setState({
startshixunCombattypes:false startshixunCombattypes:false
}) })
} };
Modifyloginvalue=()=>{
this.setState({
isRender:false,
})
};
Tojoinclass=()=> {
this.setState({
isRender: true
})
};
render(){ render(){
let{description,whethertoedit,isSpin,start_learning,hidestartshixunsreplacevalues,learned,last_shixun,stages} =this.state; let{description,whethertoedit,isSpin,start_learning,hidestartshixunsreplacevalues,learned,last_shixun,stages,isRender} =this.state;
const isNotMembers=this.props.isNotMember();//非课堂成员 const isNotMembers=this.props.isNotMember();//非课堂成员
const antIcon = <Icon type="loading" style={{ fontSize: 24 }} spin />; const antIcon = <Icon type="loading" style={{ fontSize: 24 }} spin />;
return( return(
<React.Fragment > <React.Fragment >
<div id={"zhudiv"}> <div id={"zhudiv"}>
{isRender===true?<LoginDialog
Modifyloginvalue={()=>this.Modifyloginvalue()}
{...this.props}
{...this.state}
/>:""}
<Jointheclass {...this.props} {...this.state} ysljoinmodalCancel={()=>this.ysljoinmodalCancel()} ysljoinmodalCanceltwo={()=>this.ysljoinmodalCanceltwo()}></Jointheclass> <Jointheclass {...this.props} {...this.state} ysljoinmodalCancel={()=>this.ysljoinmodalCancel()} ysljoinmodalCanceltwo={()=>this.ysljoinmodalCanceltwo()}></Jointheclass>
<Modal <Modal
keyboard={false} keyboard={false}
@ -317,7 +353,7 @@ class Elearning extends Component{
</div>: </div>:
<div> <div>
{/*开始学习*/} {/*开始学习*/}
<YslDetailCards {...this.state} {...this.props} Startlearningtwo={()=>this.Startlearningtwo()} Myreload={()=>this.Myreload()} ></YslDetailCards> <YslDetailCards {...this.state} {...this.props} Startlearningtwo={()=>this.Startlearningtwo()} Myreload={()=>this.Myreload()} Tojoinclass={()=>this.Tojoinclass()}></YslDetailCards>
</div> </div>
} }

@ -33,11 +33,31 @@ class YslDetailCards extends Component{
}) })
}; };
startgameid=(id)=>{ startgameid=(id)=>{
if(this.props.isNotMember()===true){ // 上面传过来的方法是用来没登入弹出弹框的
//这个是外部传过来的 try {
this.props.Startlearningtwo(); let {userlogin} = this.props;
return if (userlogin === undefined) {
this.props.Tojoinclass();
return
}
if (userlogin === "") {
this.props.Tojoinclass();
return;
}
}catch (e) {
} }
try {
if(this.props.isNotMember()===true){
//这个是外部传过来的
this.props.Startlearningtwo();
return
}
}catch (e) {
}
let url = "/shixuns/" + id + "/shixun_exec.json"; let url = "/shixuns/" + id + "/shixun_exec.json";
axios.get(url).then((response) => { axios.get(url).then((response) => {

@ -145,24 +145,38 @@ class Goldsubject extends Component {
console.log(error); console.log(error);
}) })
}else{ }else{
let subjectid= this.props.match.params.subjectid;
let url = "/courses/new.json" let url = "/courses/new.json"
axios.get(url).then((result) => { axios.get(url,{params:{
console.log(result) subject_id:subjectid, //这是带过来的值
}}).then((response) => {
if (response) {
// this.goback
if(response.data){
console.log("获取Goldsubject.js");
console.log(response.data);
if(response.data.status===0){
this.props.form.setFieldsValue({
classroom: response.data.course_name,
name: response.data.name,
});
}
}
}
}).catch((error) => { }).catch((error) => {
console.log(error); console.log(error);
}) })
// console.log(user_school); // console.log(user_school);
this.props.form.setFieldsValue({ this.props.form.setFieldsValue({
school:user_school, school:user_school,
starttime:moment(new Date(),dateFormat),
}); });
this.setState({ this.setState({
school:user_school, school:user_school,
Whethertocreateanewclassroom:true, Whethertocreateanewclassroom:true,
datatimetwo: moment(new Date(),dateFormat),
}); });
this.handleSearchschool(user_school); this.handleSearchschool(user_school);
} }
@ -700,17 +714,17 @@ class Goldsubject extends Component {
{options} {options}
</AutoComplete> </AutoComplete>
)} )}
<span className={"newcoursestitle fl"}> {/*<span className={"newcoursestitle fl"}>*/}
{/*(如果本学期包含多个班级,只需创建一个课堂然后在课堂内部建立不同的分班)*/} {/* /!*(如果本学期包含多个班级,只需创建一个课堂然后在课堂内部建立不同的分班)*!/*/}
<p className="ant-progress-text"> {/* <p className="ant-progress-text">*/}
<Icon style={{ color: '#52c41a' }} type="check-circle" theme="filled"/> {/* <Icon style={{ color: '#52c41a' }} type="check-circle" theme="filled"/>*/}
<span className={"color-grey-9 font-12 ml5"}>正确示例数据结构2019春季班级</span> {/* <span className={"color-grey-9 font-12 ml5"}>正确示例数据结构2019春季班级</span>*/}
</p> {/* </p>*/}
<p className="ant-progress-text"> {/* <p className="ant-progress-text">*/}
<Icon style={{ color: 'red' }} theme="filled" type="close-circle"/> {/* <Icon style={{ color: 'red' }} theme="filled" type="close-circle"/>*/}
<span className={"color-grey-9 font-12 ml5"}>错误示例2019春季班级数据结构</span> {/* <span className={"color-grey-9 font-12 ml5"}>错误示例2019春季班级数据结构</span>*/}
</p> {/* </p>*/}
</span> {/* </span>*/}
<div id='isclassroom'></div> <div id='isclassroom'></div>
</Form.Item> </Form.Item>
@ -818,7 +832,7 @@ class Goldsubject extends Component {
{getFieldDecorator("checkboxgroup", { {getFieldDecorator("checkboxgroup", {
initialValue: [ initialValue: [
"announcement","online_learning","shixun_homework", "exercise", "announcement","online_learning","shixun_homework","common_homework",
], ],
})( })(
<Checkbox.Group style={{width: "800px", marginTop: "10px"}}> <Checkbox.Group style={{width: "800px", marginTop: "10px"}}>

@ -55,7 +55,7 @@ class Jointheclass extends Component {
width="600px" width="600px"
> >
<div className="educouddiv"> <div className="educouddiv">
<div className={"tabeltext-alignleft"}><p className={"mt20 font-16"}>是否确认该加入课堂?</p></div> <div className={"tabeltext-alignleft"}><p className={"mt70 mb70 font-16"}>是否确认该加入课堂?</p></div>
<div className="clearfix edu-txt-center mt20"> <div className="clearfix edu-txt-center mt20">
<style> <style>
{ {

@ -57,4 +57,13 @@
.pd4020{ .pd4020{
padding: 0 40px 0 20px !important; padding: 0 40px 0 20px !important;
}
.bannername780{
max-width: 780px;
overflow: hidden;
-o-text-overflow: ellipsis;
text-overflow: ellipsis;
white-space: nowrap;
height: 40px;
} }

@ -255,7 +255,7 @@ class DetailTop extends Component{
</Menu> </Menu>
); );
console.log(this.props.courses)
return( return(
@ -276,9 +276,12 @@ class DetailTop extends Component{
detailInfoList && detailInfoList &&
<div className={this.props.courses===undefined||this.props.courses.length===0?"subhead_content":"subhead_content pt100"}> <div className={this.props.courses===undefined||this.props.courses.length===0?"subhead_content":"subhead_content pt100"}>
<div className="font-28 color-white clearfix"> <div className="font-28 color-white clearfix">
<span className="fl lineh-40"> <Tooltip placement="bottom" title={detailInfoList.name.length>27?detailInfoList.name:""}>
{detailInfoList.name} <span className="fl lineh-40 bannername780">
</span> {detailInfoList.name}
</span>
</Tooltip>
<style> <style>
{ {
` `
@ -321,7 +324,13 @@ class DetailTop extends Component{
{ detailInfoList.allow_send === true?this.props.courses===undefined? { detailInfoList.allow_send === true?this.props.courses===undefined?
<SendPanel {...this.props} {...this.state}></SendPanel>:"":"" <SendPanel {...this.props} {...this.state}></SendPanel>:"":""
} }
<div className="fr pr">
{this.props.courses===undefined?"":detailInfoList.is_creator===true?<a className={"fl font-18 color-white mt5 kaike mr20"} onClick={()=>this.OpenCoursefun()}>开课</a>:""}
{detailInfoList===undefined?"":detailInfoList.allow_statistics===true?this.props.courses===undefined?"":<Link to={"/paths/"+this.props.match.params.pathId+"/statistics"} className="fl font-18 color-white mt5 kaike">
学习统计
</Link>:""
}
</div>
</div> </div>
<div className="clearfix mt20"> <div className="clearfix mt20">
{ {
@ -335,11 +344,11 @@ class DetailTop extends Component{
{ detailInfoList.member_count!=0 ? <li><span>学习人数</span><span>{detailInfoList.member_count}</span></li> : ""} { detailInfoList.member_count!=0 ? <li><span>学习人数</span><span>{detailInfoList.member_count}</span></li> : ""}
</ul> </ul>
} }
{this.props.courses===undefined?<div className="fr pr"> <div className="fr pr">
{detailInfoList===undefined?"":detailInfoList.allow_delete===true?<a {detailInfoList===undefined?"":detailInfoList.allow_delete===true?<a
className={detailInfoList.publish_status===-1?"fl font-18 color-white mt5 mr20":"fl font-18 color-white mt5"} className={detailInfoList.publish_status===-1?"fl font-18 color-white mt5 mr20":"fl font-18 color-white mt5"}
style={{opacity: '0.6'}} onClick={this.allow_deletepath} style={{opacity: '0.6'}} onClick={this.allow_deletepath}
>删除路径</a>:""} >删除课程</a>:""}
{ {
detailInfoList.publish_status===0&&detailInfoList.allow_add_member===true? detailInfoList.publish_status===0&&detailInfoList.allow_add_member===true?
@ -356,15 +365,8 @@ class DetailTop extends Component{
detailInfoList.publish_status===2 && detailInfoList.allow_statistics===true? detailInfoList.publish_status===2 && detailInfoList.allow_statistics===true?
<a className="user_default_btn user_grey_btn font-18 fl pointer ml40" onClick={this.reovkissuePath}>撤销发布</a>:"" <a className="user_default_btn user_grey_btn font-18 fl pointer ml40" onClick={this.reovkissuePath}>撤销发布</a>:""
} }
</div>:""} </div>
{this.props.courses===undefined?"":detailInfoList.is_creator===true?<div className="fr pr">
<a className={"fl font-18 color-white mt5 kaike mr20"} onClick={()=>this.OpenCoursefun()}>开课</a>
<Link to={"/paths/"+this.props.match.params.pathId+"/statistics"} className="fl font-18 color-white mt5 kaike">
学习统计
</Link>
</div>:""}
</div> </div>
@ -393,12 +395,25 @@ class DetailTop extends Component{
` `
} }
</style> </style>
{this.props.courses===undefined?"":detailInfoList.is_creator===true?this.state.courseslist.map((item,key)=>{
return(
<Tooltip placement="bottom" title={"编辑课堂"} key={key}>
<a href={`/courses/${item.course_id}/newgolds/settings`} target={"_blank"}>
<i className="iconfont icon-bianji1 newbianji1"></i>
</a>
</Tooltip>
)}):""
}
<Dropdown <Dropdown
overlay={menu} overlay={menu}
onVisibleChange={this.onVisibleChanges} onVisibleChange={this.onVisibleChanges}
> >
<a className={"alist"}> <a className={"alist"}>
<i className="iconfont icon-bianji1 newbianji1"></i><span className={"color-orange"}>{this.state.MenuItemskey}</span> <Icon className="aIcons" type={!this.state.onVisibleChangestype?"down":"up"} /> <span className={"color-orange"}>{this.state.MenuItemskey}</span>次开课 <Icon className="aIcons" type={!this.state.onVisibleChangestype?"down":"up"} />
</a> </a>
</Dropdown> </Dropdown>
</li> </li>
@ -495,24 +510,24 @@ class DetailTop extends Component{
{item.course_status.status===0?<div className="mr51 shixun_detail pointer fl user-colorgrey-green">即将开课</div>:""} {item.course_status.status===0?<div className="mr51 shixun_detail pointer fl user-colorgrey-green">即将开课</div>:""}
{item.course_status.status===1?<div className="mr51 shixun_detail pointer fl color-orange">{item.course_status.time}</div>:""} {item.course_status.status===1?<div className="mr51 shixun_detail pointer fl color-orange">{item.course_status.time}</div>:""}
{item.course_status.status===2? {item.course_status.status===2?
detailInfoList.is_creator===true?<div className="mr51 shixun_detail pointer fl user-colorgrey-9b">已结束</div>:item.course_identity<6? detailInfoList.is_creator===true||detailInfoList.allow_add_member===true?<div className="mr51 shixun_detail pointer fl user-colorgrey-9b">已结束</div>:item.course_identity<6?
<div className="mr51 shixun_detail pointer fl user-colorgrey-9b">已结束</div>:"":""} <div className="mr51 shixun_detail pointer fl user-colorgrey-9b">已结束</div>:"":""}
{item.course_status.status===0? {item.course_status.status===0?
detailInfoList.is_creator===true?<a className="fr user_default_btn task-btn-orange font-18 mt28 pathbtens" href={item.first_category_url} target="_blank"> detailInfoList.is_creator===true||detailInfoList.allow_add_member===true?<a className="fr user_default_btn task-btn-orange font-18 mt28 pathbtens" href={item.first_category_url} target="_blank">
进入课堂 进入课堂
</a>:item.course_identity<6?<div className="fr user_default_btn background191 font-18 mt28 pathbtens"></div> </a>:item.course_identity<6?<div className="fr user_default_btn background191 font-18 mt28 pathbtens"></div>
:<a className="fr user_default_btn task-btn-orange font-18 mt28 pathbtens" onClick={()=>this.JoinnowCourse(item.course_id)}>立即报名</a>:""} :<a className="fr user_default_btn task-btn-orange font-18 mt28 pathbtens" onClick={()=>this.JoinnowCourse(item.course_id)}>立即报名</a>:""}
{item.course_status.status===1? {item.course_status.status===1?
detailInfoList.is_creator===true?<a className="fr user_default_btn task-btn-orange font-18 mt28 pathbtens" onClick={()=>this.JoinnowCourse(item.course_id)}> detailInfoList.is_creator===true||detailInfoList.allow_add_member===true?<a className="fr user_default_btn task-btn-orange font-18 mt28 pathbtens" onClick={()=>this.JoinnowCourse(item.course_id)}>
进入课堂 进入课堂
</a>:item.course_identity<6?<a className="fr user_default_btn task-btn-orange font-18 mt28 pathbtens" href={item.first_category_url} target="_blank"> </a>:item.course_identity<6?<a className="fr user_default_btn task-btn-orange font-18 mt28 pathbtens" href={item.first_category_url} target="_blank">
立即学习 立即学习
</a>:<a className="fr user_default_btn task-btn-orange font-18 mt28 pathbtens" onClick={()=>this.JoinnowCourse(item.course_id)}></a>:""} </a>:<a className="fr user_default_btn task-btn-orange font-18 mt28 pathbtens" onClick={()=>this.JoinnowCourse(item.course_id)}></a>:""}
{item.course_status.status===2? {item.course_status.status===2?
detailInfoList.is_creator===true?<a className="fr user_default_btn task-btn-orange font-18 mt28 pathbtens" href={item.first_category_url} target="_blank"> detailInfoList.is_creator===true||detailInfoList.allow_add_member===true?<a className="fr user_default_btn task-btn-orange font-18 mt28 pathbtens" href={item.first_category_url} target="_blank">
进入课堂 进入课堂
</a>:item.course_identity<6?<a className="fr user_default_btn task-btn-orange font-18 mt28 pathbtens" href={item.first_category_url} target="_blank"> </a>:item.course_identity<6?<a className="fr user_default_btn task-btn-orange font-18 mt28 pathbtens" href={item.first_category_url} target="_blank">
进入课堂 进入课堂

@ -26,9 +26,9 @@ class OpenCourse extends Component {
console.log(this.props.match.params.pathId) console.log(this.props.match.params.pathId)
if(value===0){ if(value===0){
window.open(`/courses/${this.props.match.params.pathId}/newgold/0 `); window.open(`/courses/news/${this.props.match.params.pathId}/newgold/0 `);
}else{ }else{
window.open(`/courses/${this.props.match.params.pathId}/newgold/1`); window.open(`/courses/news/${this.props.match.params.pathId}/newgold/1`);
} }
this.props.OpenCourseCancel(); this.props.OpenCourseCancel();
} }
@ -68,10 +68,11 @@ class OpenCourse extends Component {
<div className={"tabeltext-alignleft"}> <div className={"tabeltext-alignleft"}>
<p className={"mt20 mb20 font-16"}> <p className={"mt20 mb20 font-16"}>
<Radio.Group onChange={this.setpathradioChange} value={this.state.value}> <Radio.Group onChange={this.setpathradioChange} value={this.state.value}>
<Radio style={pathradioStyle} value={1}> <Radio style={pathradioStyle} value={1} className={"mt10"}>
开放课堂<span style={pathradioStyles}>所有用户可以随时访问</span> 开放课堂<span style={pathradioStyles}>所有用户可以随时访问</span>
</Radio> </Radio>
<Radio style={pathradioStyle} value={0}>
<Radio style={pathradioStyle} value={0} className={"mt10"}>
私有课堂<span style={pathradioStyles}>仅报名参与的课堂成员可以访问</span> 私有课堂<span style={pathradioStyles}>仅报名参与的课堂成员可以访问</span>
</Radio> </Radio>
</Radio.Group> </Radio.Group>

@ -461,7 +461,7 @@ class PathDetailIndex extends Component{
</div> </div>
<Tooltip placement="bottom" title={"显示全部"}> <Tooltip placement="bottom" title={"显示全部"}>
<div className={tags.length>15&&clickdetailInfoListtype===false?"newsubscript mb9 color-grey-9 fr":"newsubscript mb9 color-grey-9 none"} <div className={tags.length>20&&clickdetailInfoListtype===false?"newsubscript mb9 color-grey-9 fr":"newsubscript mb9 color-grey-9 none"}
onClick={()=>this.clickNewsubscript(0)} onClick={()=>this.clickNewsubscript(0)}
><span className="mr8">...</span><Icon type="caret-down" /> ><span className="mr8">...</span><Icon type="caret-down" />
</div> </div>
@ -542,7 +542,7 @@ class PathDetailIndex extends Component{
{ {
detailInfoList===undefined?"":detailInfoList.allow_add_member===true? <div> detailInfoList===undefined?"":detailInfoList.allow_add_member===true? <div>
{key!=0?<div className="fr ml15 flex1"><a onClick={()=>this.moveup(item)}><Tooltip title="上移"><i className="color-green font-18 iconfont icon-xiangshangyi"></i></Tooltip></a></div>:""} {key!=0?<div className="fr ml15 flex1"><a onClick={()=>this.moveup(item)}><Tooltip title="上移"><i className="color-green font-18 iconfont icon-xiangshangyi"></i></Tooltip></a></div>:""}
{key+1!= members&&members.length?<div className="fr ml15 flex1 "><a onClick={()=>this.movedown(item)}><Tooltip title="下移"><i className="color-green font-18 iconfont icon-xiangxiayi"></i></Tooltip></a></div>:""} {key+1== members.length?"":<div className="fr ml15 flex1 "><a onClick={()=>this.movedown(item)}><Tooltip title="下移"><i className="color-green font-18 iconfont icon-xiangxiayi"></i></Tooltip></a></div>}
</div> </div>
:"" :""
} }

@ -35,14 +35,14 @@ if (!window['indexHOCLoaded']) {
// $('head').append($('<link rel="stylesheet" type="text/css" />') // $('head').append($('<link rel="stylesheet" type="text/css" />')
// .attr('href', `${_url_origin}/stylesheets/educoder/antd.min.css?1525440977`)); // .attr('href', `${_url_origin}/stylesheets/educoder/antd.min.css?1525440977`));
$('head').append($('<link rel="stylesheet" type="text/css" />') $('head').append($('<link rel="stylesheet" type="text/css" />')
.attr('href', `${_url_origin}/stylesheets/css/edu-common.css?9`)); .attr('href', `${_url_origin}/stylesheets/css/edu-common.css?1`));
$('head').append($('<link rel="stylesheet" type="text/css" />') $('head').append($('<link rel="stylesheet" type="text/css" />')
.attr('href', `${_url_origin}/stylesheets/educoder/edu-main.css?9`)); .attr('href', `${_url_origin}/stylesheets/educoder/edu-main.css?1`));
// index.html有加载 // index.html有加载
$('head').append($('<link rel="stylesheet" type="text/css" />') $('head').append($('<link rel="stylesheet" type="text/css" />')
.attr('href', `${_url_origin}/stylesheets/educoder/edu-all.css?9`)); .attr('href', `${_url_origin}/stylesheets/educoder/edu-all.css?1`));
// $('head').append($('<link rel="stylesheet" type="text/css" />') // $('head').append($('<link rel="stylesheet" type="text/css" />')

@ -114,10 +114,26 @@ em.vertical-line{display: inline-block;width: 2px;background: #999;height: 10px}
.smallSquare:nth-child(3n+0){margin-right: 0px;} .smallSquare:nth-child(3n+0){margin-right: 0px;}
.partimg{height: 180px;width: 100%;border-radius: 6px 6px 0px 0px;} .partimg{height: 180px;width: 100%;border-radius: 6px 6px 0px 0px;}
/*块状列表上面的绿色标签*/ /*块状列表上面的绿色标签*/
.tag-green{position: absolute;left: 0px;top:20px;} .tag-green{
.tag-green .tag-name{display: block;width: auto;background-image: url("/images/educoder/tag1.png");background-size: 100% 100%;padding: 0px 8px;color: #fff;float: left;} position: absolute;
.tag-orange{position: absolute;right: 0px;top:20px;} left: 10px;
.tag-orange .tag-name{display: block;width: auto;background-color:#FF6800;background-size: 100% 100%;padding: 0px 8px;color: #fff;float: left;} bottom: 90px;}
.tag-green .tag-name{display: block;width: auto;
/*background-image: url("/images/educoder/tag1.png");*/
background: #000000;
border: 1px solid #fff;
border-radius: 3px;
font-size: 14px;
opacity: 0.56;
background-size: 100% 100%;padding: 0px 8px;color: #fff;float: left;}
.tag-orange{position: absolute;right: 0px;top:12px;}
.tag-orange .tag-name{display: block;width: auto;background-color:#FF6800;
background-size: 100% 100%;padding: 0px 8px;color: #fff;float: left;
height: 28px;
line-height: 28px;
border-top-left-radius: 4px;
border-bottom-left-radius: 4px;
}
/*发送至弹框里的下拉框*/ /*发送至弹框里的下拉框*/
.downSelectOption{position: relative;height: 35px;} .downSelectOption{position: relative;height: 35px;}
.downSelectOption .showOption{background-color: #F4F4F4;border: 1px solid #EAEAEA;width: 100%;padding: 5px 40px 5px 5px;outline: none;height: 100%;box-sizing: border-box;} .downSelectOption .showOption{background-color: #F4F4F4;border: 1px solid #EAEAEA;width: 100%;padding: 5px 40px 5px 5px;outline: none;height: 100%;box-sizing: border-box;}
@ -3714,9 +3730,13 @@ a.singlepublishtwo{
} }
.shaiContent li.shaiItem:hover i.iconfont{ .shaiContent li.shaiItem:hover i.iconfont{
color: #4CACFF!important color: #4CACFF !important;
} }
.detail_for_paragraph p{ .detail_for_paragraph p{
white-space: pre-wrap; white-space: pre-wrap;
}
.ant-tooltip{
max-width: 100% !important;
} }
Loading…
Cancel
Save