From 2de1014d4b65f7acddf25c3122b0450ded195b27 Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Fri, 6 Mar 2020 20:47:38 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../homework_commons_controller.rb | 1084 ++++++++--------- 1 file changed, 515 insertions(+), 569 deletions(-) diff --git a/app/controllers/homework_commons_controller.rb b/app/controllers/homework_commons_controller.rb index d4e7ae4a3..415207707 100644 --- a/app/controllers/homework_commons_controller.rb +++ b/app/controllers/homework_commons_controller.rb @@ -58,7 +58,7 @@ class HomeworkCommonsController < ApplicationController end @published_count = @user_course_identity < Course::STUDENT ? @homework_commons.homework_published.size : - @homework_commons.size + @homework_commons.size unless search.blank? @homework_commons = @homework_commons.where("homework_commons.name like ?", "%#{search}%") @@ -110,7 +110,7 @@ class HomeworkCommonsController < ApplicationController if @homework_type == 4 @homework_commons = @homework_commons.includes(:homework_detail_manual, :published_settings, :homework_group_settings, :shixuns, :course_second_category, user: :user_extension) elsif @homework_type == 3 - @homework_commons = @homework_commons.includes(:homework_detail_manual, :published_settings, :homework_group_settings, :homework_detail_group, :course_second_category, user: :user_extension) + @homework_commons = @homework_commons.includes(:homework_detail_manual, :published_settings, :homework_group_settings, :homework_detail_group, :course_second_category, user: :user_extension) else @homework_commons = @homework_commons.includes(:homework_detail_manual, :published_settings, :homework_group_settings, :course_second_category, user: :user_extension) end @@ -128,7 +128,7 @@ class HomeworkCommonsController < ApplicationController if @homework.publish_time.blank? || (@homework.publish_time > Time.now) @student_works = [] if (params[:format] == "xlsx") || (params[:format] == "zip") - normal_status(-1,"作业未发布") + normal_status(-1, "作业未发布") end else if @user_course_identity == Course::STUDENT @@ -145,14 +145,14 @@ class HomeworkCommonsController < ApplicationController # 学生已提交作品且补交(提交)已截止、作品公开、非匿评阶段 if @work&.work_status.to_i > 0 && (@homework.work_public || @homework.score_open) && - ((!@homework.anonymous_comment && @homework.end_or_late) || (@homework_detail_manual.comment_status > 4 && @homework.end_or_late)) + ((!@homework.anonymous_comment && @homework.end_or_late) || (@homework_detail_manual.comment_status > 4 && @homework.end_or_late)) @student_works = student_works.where("student_works.user_id != #{@work.user_id}") # 匿评、申诉阶段只能看到分配给自己的匿评作品 elsif @work&.work_status.to_i > 0 && @homework.anonymous_comment && @homework_detail_manual.comment_status > 2 && @homework_detail_manual.comment_status <= 4 @is_evaluation = true @student_works = student_works.joins(:student_works_evaluation_distributions).where( - "student_works_evaluation_distributions.user_id = #{@current_user.id}") + "student_works_evaluation_distributions.user_id = #{@current_user.id}") else @student_works = [] end @@ -173,7 +173,7 @@ class HomeworkCommonsController < ApplicationController unless params[:teacher_comment].blank? student_work_ids = StudentWorksScore.where(student_work_id: @student_works.map(&:id)).pluck(:student_work_id) if params[:teacher_comment].to_i == 0 - @student_works = @student_works.where.not(id: student_work_ids) + @student_works = @student_works.where.not(id: student_work_ids) elsif params[:teacher_comment].to_i == 1 @student_works = @student_works.where(id: student_work_ids) end @@ -182,7 +182,7 @@ class HomeworkCommonsController < ApplicationController # 作品状态 0: 未提交, 1 按时提交, 2 延迟提交 if params[:work_status].present? params_work_status = params[:work_status] - work_status = params_work_status.map{|status| status.to_i} + work_status = params_work_status.map {|status| status.to_i} if @homework.homework_type == "practice" @student_works = @student_works.where(compelete_status: work_status) else @@ -241,17 +241,17 @@ class HomeworkCommonsController < ApplicationController if @user_course_identity >= Course::STUDENT tip_exception(403, "无权限操作") elsif @work_excel.blank? || @work_excel.size == 0 - normal_status(-1,"暂无用户提交!") + normal_status(-1, "暂无用户提交!") elsif params[:export].present? && params[:export] - normal_status(0,"正在下载中") + normal_status(0, "正在下载中") else respond_to do |format| - format.xlsx{ + format.xlsx { set_export_cookies - student_work_to_xlsx(@work_excel,@homework) + student_work_to_xlsx(@work_excel, @homework) exercise_export_name = "#{current_user.real_name}_#{@course.name}_#{@homework.name}_#{Time.now.strftime('%Y%m%d_%H%M%S')}" - render xlsx: "#{exercise_export_name.strip}",template: "homework_commons/works_list.xlsx.axlsx",locals: - {table_columns: @work_head_cells,task_users: @work_cells_column} + render xlsx: "#{exercise_export_name.strip}", template: "homework_commons/works_list.xlsx.axlsx", locals: + {table_columns: @work_head_cells, task_users: @work_cells_column} } end end @@ -268,10 +268,10 @@ class HomeworkCommonsController < ApplicationController if status == 0 if params[:export].present? && params[:export] - normal_status(0,"正在下载中") + normal_status(0, "正在下载中") else respond_to do |format| - format.zip{ + format.zip { set_export_cookies zipfile = zip_homework_common @homework, zip_works file = decode64(zipfile[0][:base64file]) @@ -289,33 +289,21 @@ class HomeworkCommonsController < ApplicationController def update_score tip_exception("作业还未发布,暂不能计算成绩") if @homework.publish_time.nil? || @homework.publish_time > Time.now - begin - @homework.update_homework_work_score - normal_status("更新成功") - rescue Exception => e - uid_logger(e.message) - tip_exception(e.message) - raise ActiveRecord::Rollback - end + @homework.update_homework_work_score + normal_status("更新成功") end def update_student_score work = @homework.student_works.find_by(user_id: current_user.id) myshixun = Myshixun.find_by(shixun_id: params[:shixun_id], user_id: current_user.id) ActiveRecord::Base.transaction do - begin - if work && myshixun - challenge_settings = @homework.homework_challenge_settings - games = myshixun.games.where(challenge_id: challenge_settings.pluck(:challenge_id)) - HomeworksService.new.update_myshixun_work_score work, myshixun, games, @homework, challenge_settings - normal_status("更新成功") - else - normal_status("还未开启挑战,暂不能更新成绩") - end - rescue Exception => e - uid_logger(e.message) - tip_exception(e.message) - raise ActiveRecord::Rollback + if work && myshixun + challenge_settings = @homework.homework_challenge_settings + games = myshixun.games.where(challenge_id: challenge_settings.pluck(:challenge_id)) + HomeworksService.new.update_myshixun_work_score work, myshixun, games, @homework, challenge_settings + normal_status("更新成功") + else + normal_status("还未开启挑战,暂不能更新成绩") end end end @@ -382,41 +370,35 @@ class HomeworkCommonsController < ApplicationController end ActiveRecord::Base.transaction do - begin - @homework = HomeworkCommon.new(homework_params) - @homework.reference_answer = params[:reference_answer].to_s.strip - @homework.homework_type = @homework_type - @homework.user_id = current_user.id - @homework.course_id = @course.id - - homework_detail_manual = HomeworkDetailManual.new - @homework.homework_detail_manual = homework_detail_manual - homework_detail_manual.te_proportion = 0.7 - homework_detail_manual.ta_proportion = 0.3 - - if @homework_type == 3 - homework_detail_group = HomeworkDetailGroup.new(min_num: params[:min_num].to_i, max_num: params[:max_num].to_i, - base_on_project: params[:base_on_project]) - @homework.homework_detail_group = homework_detail_group - end + @homework = HomeworkCommon.new(homework_params) + @homework.reference_answer = params[:reference_answer].to_s.strip + @homework.homework_type = @homework_type + @homework.user_id = current_user.id + @homework.course_id = @course.id + + homework_detail_manual = HomeworkDetailManual.new + @homework.homework_detail_manual = homework_detail_manual + homework_detail_manual.te_proportion = 0.7 + homework_detail_manual.ta_proportion = 0.3 + + if @homework_type == 3 + homework_detail_group = HomeworkDetailGroup.new(min_num: params[:min_num].to_i, max_num: params[:max_num].to_i, + base_on_project: params[:base_on_project]) + @homework.homework_detail_group = homework_detail_group + end - if @homework.save! - homework_detail_manual.save! if homework_detail_manual - homework_detail_group.save! if homework_detail_group + if @homework.save! + homework_detail_manual.save! if homework_detail_manual + homework_detail_group.save! if homework_detail_group - # 作业描述的附件 - Attachment.associate_container(params[:attachment_ids], @homework.id, @homework.class) if params[:attachment_ids] - # 作业参考答案的附件 - Attachment.associate_container(params[:reference_attachment_ids], @homework.id, @homework.class, 2) if params[:reference_attachment_ids] + # 作业描述的附件 + Attachment.associate_container(params[:attachment_ids], @homework.id, @homework.class) if params[:attachment_ids] + # 作业参考答案的附件 + Attachment.associate_container(params[:reference_attachment_ids], @homework.id, @homework.class, 2) if params[:reference_attachment_ids] - HomeworksService.new.create_works_list(@homework, @course) - else - tip_exception("创建失败") - end - rescue Exception => e - uid_logger(e.message) - tip_exception(e.message) - raise ActiveRecord::Rollback + HomeworksService.new.create_works_list(@homework, @course) + else + tip_exception("创建失败") end end end @@ -432,30 +414,25 @@ class HomeworkCommonsController < ApplicationController end ActiveRecord::Base.transaction do - begin - @homework.update_attributes!(homework_params) - @homework.reference_answer = params[:reference_answer].to_s.strip - - if @homework.homework_type == "group" - homework_detail_group = @homework.homework_detail_group - param_min = params[:min_num].to_i - param_max = params[:max_num].to_i - homework_detail_group.min_num = @homework.has_commit_work ? [param_min, homework_detail_group.min_num].min : param_min - homework_detail_group.max_num = @homework.has_commit_work ? [param_max, homework_detail_group.max_num].max : param_max - homework_detail_group.base_on_project = params[:base_on_project] unless @homework.has_relate_project - homework_detail_group.save! - end - # 作业描述的附件 - Attachment.associate_container(params[:attachment_ids], @homework.id, @homework.class) if params[:attachment_ids] - # 作业参考答案的附件 - Attachment.associate_container(params[:reference_attachment_ids], @homework.id, @homework.class, 2) if params[:reference_attachment_ids] - - normal_status(0, "更新成功") - rescue Exception => e - uid_logger(e.message) - tip_exception(e.message) - raise ActiveRecord::Rollback + @homework.update_attributes!(homework_params) + @homework.reference_answer = params[:reference_answer].to_s.strip + + if @homework.homework_type == "group" + homework_detail_group = @homework.homework_detail_group + param_min = params[:min_num].to_i + param_max = params[:max_num].to_i + homework_detail_group.min_num = @homework.has_commit_work ? [param_min, homework_detail_group.min_num].min : param_min + homework_detail_group.max_num = @homework.has_commit_work ? [param_max, homework_detail_group.max_num].max : param_max + homework_detail_group.base_on_project = params[:base_on_project] unless @homework.has_relate_project + homework_detail_group.save! end + # 作业描述的附件 + Attachment.associate_container(params[:attachment_ids], @homework.id, @homework.class) if params[:attachment_ids] + # 作业参考答案的附件 + Attachment.associate_container(params[:reference_attachment_ids], @homework.id, @homework.class, 2) if params[:reference_attachment_ids] + + normal_status(0, "更新成功") + end end @@ -467,304 +444,298 @@ class HomeworkCommonsController < ApplicationController end def update_settings - begin - # 课堂结束后不能再更新 - unless @course.is_end - - # 发布设置 - UpdateHomeworkPublishSettingService.call(@homework, publish_params) - - # 补交设置 - tip_exception("缺少allow_late参数") if params[:allow_late].nil? - tip_exception("缺少late_penalty参数") if params[:allow_late] && params[:late_penalty].blank? - tip_exception("缺少late_time参数") if params[:allow_late] && params[:late_time].blank? - - current_late_penalty = @homework.late_penalty - if params[:allow_late] - tip_exception("补交结束时间必须晚于截止时间") if params[:late_time] <= strf_time(@homework.end_time) - tip_exception("补交结束时间不能晚于课堂结束时间(#{@course.end_date.end_of_day.strftime("%Y-%m-%d %H:%M")})") if @course.end_date.present? && params[:late_time] > - strf_time(@course.end_date.end_of_day) - tip_exception("迟交扣分不能小于0") if params[:late_penalty] && params[:late_penalty].to_i < 0 + # 课堂结束后不能再更新 + unless @course.is_end + + # 发布设置 + UpdateHomeworkPublishSettingService.call(@homework, publish_params) + + # 补交设置 + tip_exception("缺少allow_late参数") if params[:allow_late].nil? + tip_exception("缺少late_penalty参数") if params[:allow_late] && params[:late_penalty].blank? + tip_exception("缺少late_time参数") if params[:allow_late] && params[:late_time].blank? + + current_late_penalty = @homework.late_penalty + if params[:allow_late] + tip_exception("补交结束时间必须晚于截止时间") if params[:late_time] <= strf_time(@homework.end_time) + tip_exception("补交结束时间不能晚于课堂结束时间(#{@course.end_date.end_of_day.strftime("%Y-%m-%d %H:%M")})") if @course.end_date.present? && params[:late_time] > + strf_time(@course.end_date.end_of_day) + tip_exception("迟交扣分不能小于0") if params[:late_penalty] && params[:late_penalty].to_i < 0 + + @homework.allow_late = true + @homework.late_time = params[:late_time] + @homework.late_penalty = params[:late_penalty].to_i + else + @homework.allow_late = false + @homework.late_penalty = 0 + @homework.late_time = nil + end - @homework.allow_late = true - @homework.late_time = params[:late_time] - @homework.late_penalty = params[:late_penalty].to_i - else - @homework.allow_late = false - @homework.late_penalty = 0 - @homework.late_time = nil + # 迟交扣分有变动则更新迟交学生的成绩 + late_penalty_change = @homework.late_penalty != current_late_penalty + + if @homework.homework_type == "practice" + + # 实训作业的评分设置 + tip_exception("总分值不能为空") if params[:total_score].blank? + tip_exception("总分值不能小于0") if params[:total_score].to_i < 0 + tip_exception("缺少answer_open_evaluation参数") if params[:answer_open_evaluation].nil? + tip_exception("缺少work_efficiency参数") if params[:work_efficiency].nil? + tip_exception("缺少eff_score参数") if params[:work_efficiency] && params[:eff_score].blank? + tip_exception("效率分不能小于等于0") if params[:work_efficiency] && params[:eff_score] && params[:eff_score].to_f <= 0 + tip_exception("效率分不能大于总分值") if params[:work_efficiency] && params[:eff_score] && params[:eff_score].to_f.round(2) > params[:total_score].to_f.round(2) + tip_exception("缺少shixun_evaluation参数") if params[:shixun_evaluation].blank? + tip_exception("缺少challenge_settings参数") if params[:challenge_settings].blank? + # tip_exception("缺少challenge_id参数") if params[:challenge_settings][:challenge_id].blank? + # tip_exception("缺少challenge_score参数") if params[:challenge_settings][:challenge_score].blank? + # tip_exception("challenge_id参数的长度与challenge_score参数的长度不匹配") if + # params[:challenge_settings][:challenge_score].length != params[:challenge_settings][:challenge_id].length + + sum_challenge_score = params[:challenge_settings].pluck(:challenge_score).reject(&:blank?)&.map {|score| score.to_f}.sum + total_score = params[:work_efficiency] ? (params[:eff_score].to_f + sum_challenge_score) : sum_challenge_score + tip_exception("分值之和必须等于总分值:#{params[:total_score]}分") if params[:total_score].to_f.round(2) != total_score.to_f.round(2) + + current_eff_score = @homework.eff_score.to_f.round(2) + @homework.total_score = params[:total_score] + @homework.work_efficiency = params[:work_efficiency] + @homework.eff_score = params[:work_efficiency] ? params[:eff_score].to_f.round(2) : 0 + + update_eff_score = current_eff_score.round(2) != @homework.eff_score.round(2) + + if @homework_detail_manual.answer_open_evaluation != params[:answer_open_evaluation] + @homework_detail_manual.answer_open_evaluation = params[:answer_open_evaluation] + score_change = true end - # 迟交扣分有变动则更新迟交学生的成绩 - late_penalty_change = @homework.late_penalty != current_late_penalty - - if @homework.homework_type == "practice" - - # 实训作业的评分设置 - tip_exception("总分值不能为空") if params[:total_score].blank? - tip_exception("总分值不能小于0") if params[:total_score].to_i < 0 - tip_exception("缺少answer_open_evaluation参数") if params[:answer_open_evaluation].nil? - tip_exception("缺少work_efficiency参数") if params[:work_efficiency].nil? - tip_exception("缺少eff_score参数") if params[:work_efficiency] && params[:eff_score].blank? - tip_exception("效率分不能小于等于0") if params[:work_efficiency] && params[:eff_score] && params[:eff_score].to_f <= 0 - tip_exception("效率分不能大于总分值") if params[:work_efficiency] && params[:eff_score] && params[:eff_score].to_f.round(2) > params[:total_score].to_f.round(2) - tip_exception("缺少shixun_evaluation参数") if params[:shixun_evaluation].blank? - tip_exception("缺少challenge_settings参数") if params[:challenge_settings].blank? - # tip_exception("缺少challenge_id参数") if params[:challenge_settings][:challenge_id].blank? - # tip_exception("缺少challenge_score参数") if params[:challenge_settings][:challenge_score].blank? - # tip_exception("challenge_id参数的长度与challenge_score参数的长度不匹配") if - # params[:challenge_settings][:challenge_score].length != params[:challenge_settings][:challenge_id].length - - sum_challenge_score = params[:challenge_settings].pluck(:challenge_score).reject(&:blank?)&.map{|score| score.to_f}.sum - total_score = params[:work_efficiency] ? (params[:eff_score].to_f + sum_challenge_score) : sum_challenge_score - tip_exception("分值之和必须等于总分值:#{params[:total_score]}分") if params[:total_score].to_f.round(2) != total_score.to_f.round(2) - - current_eff_score = @homework.eff_score.to_f.round(2) - @homework.total_score = params[:total_score] - @homework.work_efficiency = params[:work_efficiency] - @homework.eff_score = params[:work_efficiency] ? params[:eff_score].to_f.round(2) : 0 - - update_eff_score = current_eff_score.round(2) != @homework.eff_score.round(2) - - if @homework_detail_manual.answer_open_evaluation != params[:answer_open_evaluation] - @homework_detail_manual.answer_open_evaluation = params[:answer_open_evaluation] - score_change = true - end - - @homework_detail_manual.shixun_evaluation = params[:shixun_evaluation].to_i - - if params[:challenge_settings] - params[:challenge_settings].each do |challenge| - setting = @homework.homework_challenge_settings.find_by(challenge_id: challenge[:challenge_id]) - score = challenge[:challenge_score] - if setting && setting.score != score - score_change = true - setting.update_attributes!(score: score) - elsif setting.blank? - score_change = true - HomeworkChallengeSetting.create!(homework_common_id: @homework.id, challenge_id: challenge[:challenge_id], - shixun_id: @homework.homework_commons_shixun.try(:shixun_id), score: score) - end - end + @homework_detail_manual.shixun_evaluation = params[:shixun_evaluation].to_i - if @homework.homework_challenge_settings.where.not(challenge_id: params[:challenge_settings].pluck(:challenge_id)).count > 0 + if params[:challenge_settings] + params[:challenge_settings].each do |challenge| + setting = @homework.homework_challenge_settings.find_by(challenge_id: challenge[:challenge_id]) + score = challenge[:challenge_score] + if setting && setting.score != score score_change = true - @homework.homework_challenge_settings.where.not(challenge_id: params[:challenge_settings].pluck(:challenge_id)).destroy_all + setting.update_attributes!(score: score) + elsif setting.blank? + score_change = true + HomeworkChallengeSetting.create!(homework_common_id: @homework.id, challenge_id: challenge[:challenge_id], + shixun_id: @homework.homework_commons_shixun.try(:shixun_id), score: score) end end - # 公开设置 - tip_exception("缺少score_open参数") if params[:score_open].nil? - @homework.score_open = params[:score_open] - - @homework.save! - if score_change && @homework.end_or_late_none_group - UpdateShixunWorkScoreJob.perform_later(@homework.id) - elsif update_eff_score && (@homework.end_or_late_none_group || @homework.max_efficiency > 0) - # 更新所有学生的效率分(作业允许补交且补交已截止 或者 作业不允许补交且提交已截止 或者作业已计算过效率分) - HomeworksService.new.update_student_eff_score HomeworkCommon.find_by(id: @homework.id) + if @homework.homework_challenge_settings.where.not(challenge_id: params[:challenge_settings].pluck(:challenge_id)).count > 0 + score_change = true + @homework.homework_challenge_settings.where.not(challenge_id: params[:challenge_settings].pluck(:challenge_id)).destroy_all end + end - # 更新迟交扣分 - if !(score_change || update_eff_score) && late_penalty_change - @homework.student_works.where(work_status: 2).each do |work| - work.late_penalty = @homework.late_penalty - work.save! - end - end + # 公开设置 + tip_exception("缺少score_open参数") if params[:score_open].nil? + @homework.score_open = params[:score_open] - unless @homework.allow_late - @homework.student_works.where(work_status: 2).update_all(work_status: 1) - end + @homework.save! + if score_change && @homework.end_or_late_none_group + UpdateShixunWorkScoreJob.perform_later(@homework.id) + elsif update_eff_score && (@homework.end_or_late_none_group || @homework.max_efficiency > 0) + # 更新所有学生的效率分(作业允许补交且补交已截止 或者 作业不允许补交且提交已截止 或者作业已计算过效率分) + HomeworksService.new.update_student_eff_score HomeworkCommon.find_by(id: @homework.id) + end - @homework_detail_manual.save! - @homework.save! - else + # 更新迟交扣分 + if !(score_change || update_eff_score) && late_penalty_change + @homework.student_works.where(work_status: 2).each do |work| + work.late_penalty = @homework.late_penalty + work.save! + end + end - # 普通和分组作业的匿评设置 - current_absence_penalty = @homework_detail_manual.absence_penalty - current_appeal_penalty = @homework_detail_manual.appeal_penalty - - # 匿评未开启前可以更新:是否开启匿评、匿评开始时间、匿评数 - if @homework_detail_manual.comment_status < 3 - tip_exception("缺少anonymous_comment参数") if params[:anonymous_comment].nil? - # anonymous_comment :true 是启用,false 是不启用 - if params[:anonymous_comment] - tip_exception("匿评开启时间不能为空") if params[:evaluation_start].blank? - tip_exception("匿评开启时间不能早于截止时间") if params[:evaluation_start] < strf_time(@homework.end_time) - tip_exception("匿评结束时间不能为空") if params[:evaluation_end].blank? - tip_exception("匿评截止时间必须晚于匿评开启时间") if params[:evaluation_end] <= params[:evaluation_start] - tip_exception("匿评截止时间不能晚于课堂结束时间(#{@course.end_date.end_of_day.strftime("%Y-%m-%d %H:%M")})") if @course.end_date.present? && params[:evaluation_end] > - strf_time(@course.end_date.end_of_day) - tip_exception("匿评数必须为正整数") if params[:evaluation_num].blank? || params[:evaluation_num].to_i < 1 - tip_exception("缺评扣分不能为空") if params[:absence_penalty].blank? - tip_exception("缺评扣分不能小于0") if params[:absence_penalty].to_i < 0 - tip_exception("缺评扣分不能大于100") if params[:absence_penalty].to_i > 100 - end + unless @homework.allow_late + @homework.student_works.where(work_status: 2).update_all(work_status: 1) + end - @homework.anonymous_comment = params[:anonymous_comment] - @homework_detail_manual.evaluation_start = !@homework.anonymous_comment ? nil : params[:evaluation_start] - @homework_detail_manual.evaluation_num = !@homework.anonymous_comment ? 0 : params[:evaluation_num] - - # 不启用匿评时还原申诉设置和教师、助教的评分比例 - unless @homework.anonymous_comment - @homework.anonymous_appeal = false - @homework_detail_manual.appeal_time = nil - @homework_detail_manual.appeal_penalty = 0 - @homework_detail_manual.te_proportion = 1 - @homework_detail_manual.ta_proportion = 0 - end + @homework_detail_manual.save! + @homework.save! + else + # 普通和分组作业的匿评设置 + current_absence_penalty = @homework_detail_manual.absence_penalty + current_appeal_penalty = @homework_detail_manual.appeal_penalty + + # 匿评未开启前可以更新:是否开启匿评、匿评开始时间、匿评数 + if @homework_detail_manual.comment_status < 3 + tip_exception("缺少anonymous_comment参数") if params[:anonymous_comment].nil? + # anonymous_comment :true 是启用,false 是不启用 + if params[:anonymous_comment] + tip_exception("匿评开启时间不能为空") if params[:evaluation_start].blank? + tip_exception("匿评开启时间不能早于截止时间") if params[:evaluation_start] < strf_time(@homework.end_time) + tip_exception("匿评结束时间不能为空") if params[:evaluation_end].blank? + tip_exception("匿评截止时间必须晚于匿评开启时间") if params[:evaluation_end] <= params[:evaluation_start] + tip_exception("匿评截止时间不能晚于课堂结束时间(#{@course.end_date.end_of_day.strftime("%Y-%m-%d %H:%M")})") if @course.end_date.present? && params[:evaluation_end] > + strf_time(@course.end_date.end_of_day) + tip_exception("匿评数必须为正整数") if params[:evaluation_num].blank? || params[:evaluation_num].to_i < 1 + tip_exception("缺评扣分不能为空") if params[:absence_penalty].blank? + tip_exception("缺评扣分不能小于0") if params[:absence_penalty].to_i < 0 + tip_exception("缺评扣分不能大于100") if params[:absence_penalty].to_i > 100 end - # 匿评未截止时可以更新匿评结束时间 - if @homework_detail_manual.comment_status < 4 - tip_exception("匿评结束时间不能为空") if @homework.anonymous_comment && params[:evaluation_end].blank? - tip_exception("匿评截止时间必须晚于匿评开启时间") if @homework.anonymous_comment && - params[:evaluation_end] <= strf_time(@homework_detail_manual.evaluation_start) - tip_exception("匿评截止时间不能晚于课堂结束时间(#{@course.end_date.end_of_day.strftime("%Y-%m-%d %H:%M")})") if @homework.anonymous_comment && - @course.end_date.present? && params[:evaluation_end] > strf_time(@course.end_date.end_of_day) + @homework.anonymous_comment = params[:anonymous_comment] + @homework_detail_manual.evaluation_start = !@homework.anonymous_comment ? nil : params[:evaluation_start] + @homework_detail_manual.evaluation_num = !@homework.anonymous_comment ? 0 : params[:evaluation_num] - @homework_detail_manual.evaluation_end = !@homework.anonymous_comment ? nil : params[:evaluation_end] + # 不启用匿评时还原申诉设置和教师、助教的评分比例 + unless @homework.anonymous_comment + @homework.anonymous_appeal = false + @homework_detail_manual.appeal_time = nil + @homework_detail_manual.appeal_penalty = 0 + @homework_detail_manual.te_proportion = 1 + @homework_detail_manual.ta_proportion = 0 end - # 作业未结束可以更新缺评扣分 - tip_exception("缺评扣分不能为空") if @homework.anonymous_comment && params[:absence_penalty].blank? - tip_exception("缺评扣分不能小于0") if @homework.anonymous_comment && params[:absence_penalty].to_i < 0 - tip_exception("缺评扣分不能大于100") if @homework.anonymous_comment && params[:absence_penalty].to_i > 100 - @homework_detail_manual.absence_penalty = !@homework.anonymous_comment ? 0 : params[:absence_penalty].to_i + end + # 匿评未截止时可以更新匿评结束时间 + if @homework_detail_manual.comment_status < 4 + tip_exception("匿评结束时间不能为空") if @homework.anonymous_comment && params[:evaluation_end].blank? + tip_exception("匿评截止时间必须晚于匿评开启时间") if @homework.anonymous_comment && + params[:evaluation_end] <= strf_time(@homework_detail_manual.evaluation_start) + tip_exception("匿评截止时间不能晚于课堂结束时间(#{@course.end_date.end_of_day.strftime("%Y-%m-%d %H:%M")})") if @homework.anonymous_comment && + @course.end_date.present? && params[:evaluation_end] > strf_time(@course.end_date.end_of_day) - # 匿评申诉设置 - # 匿评申诉未开启前可以更新:是否启用匿评申诉 - if @homework_detail_manual.comment_status < 4 && @homework.anonymous_comment - tip_exception("缺少anonymous_appeal参数") if params[:anonymous_appeal].nil? - @homework.anonymous_appeal = params[:anonymous_appeal] - end + @homework_detail_manual.evaluation_end = !@homework.anonymous_comment ? nil : params[:evaluation_end] + end + # 作业未结束可以更新缺评扣分 + tip_exception("缺评扣分不能为空") if @homework.anonymous_comment && params[:absence_penalty].blank? + tip_exception("缺评扣分不能小于0") if @homework.anonymous_comment && params[:absence_penalty].to_i < 0 + tip_exception("缺评扣分不能大于100") if @homework.anonymous_comment && params[:absence_penalty].to_i > 100 + @homework_detail_manual.absence_penalty = !@homework.anonymous_comment ? 0 : params[:absence_penalty].to_i - # 匿评申诉未结束前可以更新:匿评申诉结束时间 - if @homework_detail_manual.comment_status < 5 - tip_exception("匿评申诉结束时间不能为空") if @homework.anonymous_appeal && params[:appeal_time].blank? - tip_exception("匿评开启时间不能早于匿评截止时间") if @homework.anonymous_appeal && - params[:appeal_time] <= strf_time(@homework_detail_manual.evaluation_end) - tip_exception("匿评申诉结束不能晚于课堂结束时间(#{@course.end_date.end_of_day.strftime("%Y-%m-%d %H:%M")})") if @homework.anonymous_appeal && - @course.end_date.present? && params[:appeal_time] > strf_time(@course.end_date.end_of_day) - @homework_detail_manual.appeal_time = @homework.anonymous_appeal ? params[:appeal_time] : nil - end + # 匿评申诉设置 + # 匿评申诉未开启前可以更新:是否启用匿评申诉 + if @homework_detail_manual.comment_status < 4 && @homework.anonymous_comment + tip_exception("缺少anonymous_appeal参数") if params[:anonymous_appeal].nil? + @homework.anonymous_appeal = params[:anonymous_appeal] + end - # 作业未结束可以更新违规匿评扣分 - tip_exception("违规匿评扣分不能为空") if @homework.anonymous_appeal && params[:appeal_penalty].blank? - tip_exception("违规匿评扣分不能小于0") if @homework.anonymous_appeal && params[:appeal_penalty].to_i < 0 - tip_exception("违规匿评扣分不能大于100") if @homework.anonymous_appeal && params[:appeal_penalty].to_i > 100 - @homework_detail_manual.appeal_penalty = @homework.anonymous_appeal ? params[:appeal_penalty].to_i : 0 - - # 如果缺评扣分的设置有变更且匿评已截止 - absence_penalty_change = current_absence_penalty != @homework_detail_manual.absence_penalty && - @homework_detail_manual.comment_status >= 4 - # 如果违规匿评扣分的设置有变更且匿评已截止 - appeal_penalty_change = current_appeal_penalty != @homework_detail_manual.appeal_penalty && - @homework_detail_manual.comment_status >= 4 - - # 评分设置 - tip_exception("助教评分模式不能为空") if params[:ta_mode].blank? - - # 助教评分模式的变更 - ta_mode_change = @homework_detail_manual.ta_mode != params[:ta_mode].to_i - @homework_detail_manual.ta_mode = params[:ta_mode].to_i - - # 最终成绩组成 - tip_exception("最终成绩组成模式不能为空") if params[:final_mode].nil? - - final_mode_change = @homework_detail_manual.final_mode != params[:final_mode] - @homework_detail_manual.final_mode = params[:final_mode] - if !@homework_detail_manual.final_mode - tip_exception("教师评分比例不能为空") if params[:te_proportion].blank? - te_proportion = params[:te_proportion].to_f.round(2) - tip_exception("教师评分比例不能小于0") if te_proportion < 0 - tip_exception("助教评分比例不能为空") if params[:ta_proportion].blank? - ta_proportion = params[:ta_proportion].to_f.round(2) - tip_exception("助教评分比例不能小于0") if ta_proportion < 0 - if !@homework.anonymous_comment - tip_exception("评分比例之和不能大于100") if (te_proportion + ta_proportion) > 1.0 - else - tip_exception("学生评分比例不能为空") if params[:st_proportion].blank? - st_proportion = params[:st_proportion].to_f.round(2) - tip_exception("学生评分比例不能小于0") if st_proportion < 0 - tip_exception("评分比例之和不能大于100") if (te_proportion + ta_proportion + st_proportion) > 1.0 - end - proportion_change = @homework_detail_manual.te_proportion.round(2) != te_proportion || - @homework_detail_manual.ta_proportion.round(2) != ta_proportion - @homework_detail_manual.te_proportion = te_proportion - @homework_detail_manual.ta_proportion = ta_proportion + # 匿评申诉未结束前可以更新:匿评申诉结束时间 + if @homework_detail_manual.comment_status < 5 + tip_exception("匿评申诉结束时间不能为空") if @homework.anonymous_appeal && params[:appeal_time].blank? + tip_exception("匿评开启时间不能早于匿评截止时间") if @homework.anonymous_appeal && + params[:appeal_time] <= strf_time(@homework_detail_manual.evaluation_end) + tip_exception("匿评申诉结束不能晚于课堂结束时间(#{@course.end_date.end_of_day.strftime("%Y-%m-%d %H:%M")})") if @homework.anonymous_appeal && + @course.end_date.present? && params[:appeal_time] > strf_time(@course.end_date.end_of_day) + + @homework_detail_manual.appeal_time = @homework.anonymous_appeal ? params[:appeal_time] : nil + end + + # 作业未结束可以更新违规匿评扣分 + tip_exception("违规匿评扣分不能为空") if @homework.anonymous_appeal && params[:appeal_penalty].blank? + tip_exception("违规匿评扣分不能小于0") if @homework.anonymous_appeal && params[:appeal_penalty].to_i < 0 + tip_exception("违规匿评扣分不能大于100") if @homework.anonymous_appeal && params[:appeal_penalty].to_i > 100 + @homework_detail_manual.appeal_penalty = @homework.anonymous_appeal ? params[:appeal_penalty].to_i : 0 + + # 如果缺评扣分的设置有变更且匿评已截止 + absence_penalty_change = current_absence_penalty != @homework_detail_manual.absence_penalty && + @homework_detail_manual.comment_status >= 4 + # 如果违规匿评扣分的设置有变更且匿评已截止 + appeal_penalty_change = current_appeal_penalty != @homework_detail_manual.appeal_penalty && + @homework_detail_manual.comment_status >= 4 + + # 评分设置 + tip_exception("助教评分模式不能为空") if params[:ta_mode].blank? + + # 助教评分模式的变更 + ta_mode_change = @homework_detail_manual.ta_mode != params[:ta_mode].to_i + @homework_detail_manual.ta_mode = params[:ta_mode].to_i + + # 最终成绩组成 + tip_exception("最终成绩组成模式不能为空") if params[:final_mode].nil? + + final_mode_change = @homework_detail_manual.final_mode != params[:final_mode] + @homework_detail_manual.final_mode = params[:final_mode] + if !@homework_detail_manual.final_mode + tip_exception("教师评分比例不能为空") if params[:te_proportion].blank? + te_proportion = params[:te_proportion].to_f.round(2) + tip_exception("教师评分比例不能小于0") if te_proportion < 0 + tip_exception("助教评分比例不能为空") if params[:ta_proportion].blank? + ta_proportion = params[:ta_proportion].to_f.round(2) + tip_exception("助教评分比例不能小于0") if ta_proportion < 0 + if !@homework.anonymous_comment + tip_exception("评分比例之和不能大于100") if (te_proportion + ta_proportion) > 1.0 else - @homework_detail_manual.te_proportion = 1 - @homework_detail_manual.ta_proportion = 0 + tip_exception("学生评分比例不能为空") if params[:st_proportion].blank? + st_proportion = params[:st_proportion].to_f.round(2) + tip_exception("学生评分比例不能小于0") if st_proportion < 0 + tip_exception("评分比例之和不能大于100") if (te_proportion + ta_proportion + st_proportion) > 1.0 end - # 公开属性设置 - tip_exception("缺少work_public参数") if params[:work_public].nil? - tip_exception("缺少score_open参数") if params[:score_open].nil? - tip_exception("缺少answer_public参数") if params[:answer_public].nil? - @homework.work_public = params[:work_public] - @homework.score_open = params[:score_open] - @homework.answer_public = params[:answer_public] - - @homework_detail_manual.save! - @homework.save! - - # 迟交扣分、缺评扣分、违规匿评扣分、助教评分模式变更、最终成绩组成、评分比例变更都需要更新学生成绩 - if late_penalty_change || absence_penalty_change || appeal_penalty_change || ta_mode_change || - final_mode_change || proportion_change - - student_works = @homework.student_works.has_committed - work_ids = student_works.pluck(:id) - - student_works.each do |student_work| - # 迟交扣分 - student_work.late_penalty = student_work.work_status == 1 ? 0 : @homework.late_penalty - - # 缺评扣分的更新 如果之前的作业缺评扣分为0,则需重新计算缺评次数 - if absence_penalty_change - absence_penalty_count = current_absence_penalty == 0 ? student_work.absence_count : - (student_work.absence_penalty / current_absence_penalty).to_i - student_work.absence_penalty = absence_penalty_count * @homework_detail_manual.absence_penalty - end + proportion_change = @homework_detail_manual.te_proportion.round(2) != te_proportion || + @homework_detail_manual.ta_proportion.round(2) != ta_proportion + @homework_detail_manual.te_proportion = te_proportion + @homework_detail_manual.ta_proportion = ta_proportion + else + @homework_detail_manual.te_proportion = 1 + @homework_detail_manual.ta_proportion = 0 + end - # 违规匿评扣分 如果之前的作业违规扣分为0,则需重新计算违规匿评次数 - if appeal_penalty_change - appeal_penalty_count = current_appeal_penalty == 0 ? student_work.appeal_count : - (student_work.appeal_penalty / current_appeal_penalty).to_i - student_work.appeal_penalty = appeal_penalty_count * @homework_detail_manual.appeal_penalty - end + # 公开属性设置 + tip_exception("缺少work_public参数") if params[:work_public].nil? + tip_exception("缺少score_open参数") if params[:score_open].nil? + tip_exception("缺少answer_public参数") if params[:answer_public].nil? + @homework.work_public = params[:work_public] + @homework.score_open = params[:score_open] + @homework.answer_public = params[:answer_public] + + @homework_detail_manual.save! + @homework.save! + + # 迟交扣分、缺评扣分、违规匿评扣分、助教评分模式变更、最终成绩组成、评分比例变更都需要更新学生成绩 + if late_penalty_change || absence_penalty_change || appeal_penalty_change || ta_mode_change || + final_mode_change || proportion_change + + student_works = @homework.student_works.has_committed + work_ids = student_works.pluck(:id) + + student_works.each do |student_work| + # 迟交扣分 + student_work.late_penalty = student_work.work_status == 1 ? 0 : @homework.late_penalty + + # 缺评扣分的更新 如果之前的作业缺评扣分为0,则需重新计算缺评次数 + if absence_penalty_change + absence_penalty_count = current_absence_penalty == 0 ? student_work.absence_count : + (student_work.absence_penalty / current_absence_penalty).to_i + student_work.absence_penalty = absence_penalty_count * @homework_detail_manual.absence_penalty + end - # 助教模式变更且有助教评分记录时才更新 - if ta_mode_change && student_work.student_works_scores.where("reviewer_role = 2 AND score IS NOT NULL").count > 0 - student_work.teaching_asistant_score = student_work.ta_score @homework_detail_manual.ta_mode - end + # 违规匿评扣分 如果之前的作业违规扣分为0,则需重新计算违规匿评次数 + if appeal_penalty_change + appeal_penalty_count = current_appeal_penalty == 0 ? student_work.appeal_count : + (student_work.appeal_penalty / current_appeal_penalty).to_i + student_work.appeal_penalty = appeal_penalty_count * @homework_detail_manual.appeal_penalty + end - student_work.save! + # 助教模式变更且有助教评分记录时才更新 + if ta_mode_change && student_work.student_works_scores.where("reviewer_role = 2 AND score IS NOT NULL").count > 0 + student_work.teaching_asistant_score = student_work.ta_score @homework_detail_manual.ta_mode end - end + student_work.save! + end end - normal_status(0, "更新成功") - else - tip_exception("课堂已结束不能再更新") + end + normal_status(0, "更新成功") + else + tip_exception("课堂已结束不能再更新") + end # rescue ActiveRecord::RecordInvalid # render_error("保存失败") # rescue ApplicationService::Error => ex # uid_logger(ex.message) # render_error(ex.message) # raise ActiveRecord::Rollback - rescue Exception => e - uid_logger(e.backtrace) - tip_exception(e.message) - raise ActiveRecord::Rollback - end end # 选用实训 @@ -799,7 +770,7 @@ class HomeworkCommonsController < ApplicationController @total_count = @shixuns.size ## 分页参数 - page = params[:page] || 1 + page = params[:page] || 1 @shixuns = @shixuns.reorder("shixuns.created_at desc").includes(:challenges, user: [user_extension: :school]).page(page).per(10) end @@ -822,15 +793,15 @@ class HomeworkCommonsController < ApplicationController def subjects @tags = Repertoire.where(nil).order("updated_at desc") # select = params[:select] # 路径导航类型 - select = params[:type] # 路径导航类型 + select = params[:type] # 路径导航类型 reorder = params[:order] || "myshixun_count" sort = params[:sort] || "desc" search = params[:search] ## 分页参数 - page = params[:page] || 1 + page = params[:page] || 1 limit = params[:limit] || 15 - offset = (page.to_i-1) * limit + offset = (page.to_i - 1) * limit # 最热排序 if reorder == "myshixun_count" @@ -903,8 +874,8 @@ class HomeworkCommonsController < ApplicationController # 为实训作业创建与stage同名的子目录 category = CourseSecondCategory.find_by(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) + 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) # 去掉不对当前用户的单位公开的实训,已发布的实训 stage.shixuns.no_jupyter.where(id: shixun_ids).unhidden.each do |shixun| @@ -935,16 +906,14 @@ class HomeworkCommonsController < ApplicationController if params[:detail].blank? tip_exception("缺少截止时间参数") if params[:end_time].blank? tip_exception("截止时间不能早于当前时间") if params[:end_time] <= strf_time(Time.now) - tip_exception("截止时间不能晚于课堂结束时间(#{@course.end_date.end_of_day.strftime("%Y-%m-%d %H:%M")})") if - @course.end_date.present? && params[:end_time] > strf_time(@course.end_date.end_of_day) + tip_exception("截止时间不能晚于课堂结束时间(#{@course.end_date.end_of_day.strftime("%Y-%m-%d %H:%M")})") if @course.end_date.present? && params[:end_time] > strf_time(@course.end_date.end_of_day) else tip_exception("缺少分班截止时间参数") if params[:group_end_times].blank? - group_end_times = params[:group_end_times].reject(&:blank?)&.map{|time| time.to_time} + group_end_times = params[:group_end_times].reject(&:blank?)&.map {|time| time.to_time} tip_exception("截止时间和分班参数的个数不一致") if group_end_times.length != group_ids.length group_end_times.each do |time| tip_exception("分班截止时间不能早于当前时间") if time <= Time.now - tip_exception("分班截止时间不能晚于课堂结束时间(#{@course.end_date.end_of_day.strftime("%Y-%m-%d %H:%M")})") if - @course.end_date.present? && time > @course.end_date.end_of_day + tip_exception("分班截止时间不能晚于课堂结束时间(#{@course.end_date.end_of_day.strftime("%Y-%m-%d %H:%M")})") if @course.end_date.present? && time > @course.end_date.end_of_day end end @@ -955,94 +924,89 @@ class HomeworkCommonsController < ApplicationController publish_groups = charge_group_ids & group_ids if group_ids # ActiveRecord::Base.transaction do - begin - homeworks.each do |homework| - # 作业未发布时 - if homework.homework_detail_manual.try(:comment_status) == 0 - if !params[:group_ids].blank? - - # 全选即统一设置,unified_setting为true - if @course.course_groups.where(id: publish_groups).size == @course.course_groups.size && - ((params[:detail] && group_end_times.min == group_end_times.max) || params[:detail].blank?) - homework.homework_group_settings.destroy_all - homework.unified_setting = true - homework.end_time = params[:detail] ? group_end_times.max : params[:end_time] - else - homework.unified_setting = false - # 创建作业分班设置:homework_group_setting - homework.create_homework_group_settings - - # 选中的分班设置的发布时间改为当前时间,截止时间改为传的截止时间参数 - if params[:detail] - group_ids.each_with_index do |group_id, index| - homework.homework_group_settings.find_by(course_group_id: group_id)&.update_attributes!(publish_time: Time.now, - end_time: group_end_times[index]) - end - else - homework.homework_group_settings.where(course_group_id: publish_groups).update_all(publish_time: Time.now, - end_time: params[:end_time]) - end - # 发消息 - tiding_group_ids = publish_groups - end - else - homework.homework_group_settings.destroy_all - # students = @course.students - end - - homework.publish_time = Time.now - - # 截止时间的处理 - if homework.end_time.nil? - homework.end_time = params[:detail] ? group_end_times.max : params[:end_time] - elsif homework.max_group_end_time - homework.end_time = homework.max_group_end_time - end - homework.homework_detail_manual.update_attributes!(comment_status: 1) - - if homework.course_act.blank? - CourseActivity.create!(user_id: homework.user_id, course_id: homework.course_id, course_act: homework) - end - # 发消息 - HomeworkCommonPushNotifyJob.perform_later(homework.id, tiding_group_ids) + homeworks.each do |homework| + # 作业未发布时 + if homework.homework_detail_manual.try(:comment_status) == 0 + if !params[:group_ids].blank? + + # 全选即统一设置,unified_setting为true + if @course.course_groups.where(id: publish_groups).size == @course.course_groups.size && + ((params[:detail] && group_end_times.min == group_end_times.max) || params[:detail].blank?) + homework.homework_group_settings.destroy_all + homework.unified_setting = true + homework.end_time = params[:detail] ? group_end_times.max : params[:end_time] else + homework.unified_setting = false + # 创建作业分班设置:homework_group_setting homework.create_homework_group_settings - none_publish_settings = homework.homework_group_settings.where(course_group_id: publish_groups).none_published + # 选中的分班设置的发布时间改为当前时间,截止时间改为传的截止时间参数 if params[:detail] group_ids.each_with_index do |group_id, index| - none_publish_settings.find_by(course_group_id: group_id)&.update_attributes!(publish_time: Time.now, - end_time: group_end_times[index]) + homework.homework_group_settings.find_by(course_group_id: group_id)&.update_attributes!(publish_time: Time.now, + end_time: group_end_times[index]) end else - none_publish_settings.update_all(publish_time: Time.now, end_time: params[:end_time]) + homework.homework_group_settings.where(course_group_id: publish_groups).update_all(publish_time: Time.now, + end_time: params[:end_time]) end - - if homework.max_group_end_time - homework.end_time = homework.max_group_end_time - end - HomeworkCommonPushNotifyJob.perform_later(homework.id, none_publish_settings.pluck(:course_group_id)) + # 发消息 + tiding_group_ids = publish_groups end + else + homework.homework_group_settings.destroy_all + # students = @course.students + end + homework.publish_time = Time.now - if homework.end_time > Time.now && homework.homework_detail_manual.try(:comment_status) > 1 - homework.homework_detail_manual.update_attributes!(comment_status: 1) - end + # 截止时间的处理 + if homework.end_time.nil? + homework.end_time = params[:detail] ? group_end_times.max : params[:end_time] + elsif homework.max_group_end_time + homework.end_time = homework.max_group_end_time + end + homework.homework_detail_manual.update_attributes!(comment_status: 1) - # 补交结束时间 - homework.late_time = Time.at(homework.end_time.to_i + 30*24*3600) if homework.allow_late && homework.late_time.nil? + if homework.course_act.blank? + CourseActivity.create!(user_id: homework.user_id, course_id: homework.course_id, course_act: homework) + end + # 发消息 + HomeworkCommonPushNotifyJob.perform_later(homework.id, tiding_group_ids) + else + homework.create_homework_group_settings - homework.save! + none_publish_settings = homework.homework_group_settings.where(course_group_id: publish_groups).none_published + if params[:detail] + group_ids.each_with_index do |group_id, index| + none_publish_settings.find_by(course_group_id: group_id)&.update_attributes!(publish_time: Time.now, + end_time: group_end_times[index]) + end + else + none_publish_settings.update_all(publish_time: Time.now, end_time: params[:end_time]) + end - # 更新学生状态及成绩(手动点击计算) - # HomeworkPublishUpdateWorkStatusJob.perform_later(tiding_group_ids, homework.id) + if homework.max_group_end_time + homework.end_time = homework.max_group_end_time end - normal_status(0, "发布成功") - rescue Exception => e - uid_logger(e.message) - tip_exception("发布失败") - raise ActiveRecord::Rollback + HomeworkCommonPushNotifyJob.perform_later(homework.id, none_publish_settings.pluck(:course_group_id)) end + + + if homework.end_time > Time.now && homework.homework_detail_manual.try(:comment_status) > 1 + homework.homework_detail_manual.update_attributes!(comment_status: 1) + end + + # 补交结束时间 + homework.late_time = Time.at(homework.end_time.to_i + 30 * 24 * 3600) if homework.allow_late && homework.late_time.nil? + + homework.save! + + # 更新学生状态及成绩(手动点击计算) + # HomeworkPublishUpdateWorkStatusJob.perform_later(tiding_group_ids, homework.id) + end + normal_status(0, "发布成功") + # end end @@ -1051,9 +1015,9 @@ class HomeworkCommonsController < ApplicationController charge_ids = @course.charge_group_ids(@current_user) if @homework.end_immediately charge_ids # 可立即截止的分班:统一设置则是用户管理的所有分班,否则是当前用户管理的分班中已发布且未截止的 - charge_group_ids = @course.charge_group_ids(@current_user) # 当前用户管理的分班 + charge_group_ids = @course.charge_group_ids(@current_user) # 当前用户管理的分班 group_ids = @homework.unified_setting ? charge_group_ids : - @homework.homework_group_settings.where(course_group_id: charge_group_ids).published_no_end.pluck(:course_group_id) + @homework.homework_group_settings.where(course_group_id: charge_group_ids).published_no_end.pluck(:course_group_id) @course_groups = @course.course_groups.where(id: group_ids) else tip_exception("没有可截止的分班") @@ -1074,56 +1038,50 @@ class HomeworkCommonsController < ApplicationController group_ids = params[:group_ids]&.reject(&:blank?)&.map(&:to_i) end_groups = charge_group_ids & group_ids if group_ids - begin - homeworks.each do |homework| - ActiveRecord::Base.transaction do - homework_detail_manual = homework.homework_detail_manual - - # 分组设置 - if !params[:group_ids].blank? - # 确保之前是统一设置或者有新创建的分班的数据一致性 - homework.create_homework_group_settings + homeworks.each do |homework| + ActiveRecord::Base.transaction do + homework_detail_manual = homework.homework_detail_manual - homework.unified_setting = false if homework.unified_setting && end_groups.length != @course.course_groups_count + # 分组设置 + if !params[:group_ids].blank? + # 确保之前是统一设置或者有新创建的分班的数据一致性 + homework.create_homework_group_settings - # 已发布且未截止的分班 - none_end_settings = homework.homework_group_settings.where(course_group_id: end_groups).published_no_end + homework.unified_setting = false if homework.unified_setting && end_groups.length != @course.course_groups_count - none_end_settings.update_all(end_time: time) - student_works = homework.student_works.where(user_id: course_students.where(course_group_id: none_end_settings. - pluck(:course_group_id)).pluck(:user_id)).has_committed if homework.homework_type == "practice" + # 已发布且未截止的分班 + none_end_settings = homework.homework_group_settings.where(course_group_id: end_groups).published_no_end - homework.end_time = homework.max_group_end_time - if homework.end_time > time && homework_detail_manual.try(:comment_status) > 1 - homework_detail_manual.update_attributes!(comment_status: 1) - end + none_end_settings.update_all(end_time: time) + student_works = homework.student_works.where(user_id: course_students.where(course_group_id: none_end_settings. + pluck(:course_group_id)).pluck(:user_id)).has_committed if homework.homework_type == "practice" - # 统一设置 - elsif homework.unified_setting - student_works = homework.student_works.has_committed if homework.homework_type == "practice" - homework.end_time = time + homework.end_time = homework.max_group_end_time + if homework.end_time > time && homework_detail_manual.try(:comment_status) > 1 + homework_detail_manual.update_attributes!(comment_status: 1) end - # homework_detail_manual.update_attributes!(comment_status: 2) if homework.end_time <= time + # 统一设置 + elsif homework.unified_setting + student_works = homework.student_works.has_committed if homework.homework_type == "practice" + homework.end_time = time + end + + # homework_detail_manual.update_attributes!(comment_status: 2) if homework.end_time <= time - # 实训作业的作品需要计算是否迟交 - if homework.homework_type == "practice" - # shixun = homework.shixuns.first - # homework_challenge_settings = homework.homework_challenge_settings - unless student_works.blank? - student_works.joins(:myshixun).where("myshixuns.status != 1").update_all(late_penalty: homework.late_penalty) if homework.allow_late - end + # 实训作业的作品需要计算是否迟交 + if homework.homework_type == "practice" + # shixun = homework.shixuns.first + # homework_challenge_settings = homework.homework_challenge_settings + unless student_works.blank? + student_works.joins(:myshixun).where("myshixuns.status != 1").update_all(late_penalty: homework.late_penalty) if homework.allow_late end - homework.save! end - HomeworkEndUpdateScoreJob.perform_later(homework.id) if !homework.allow_late && homework.end_time <= time + homework.save! end - normal_status(0, "更新成功") - rescue Exception => e - uid_logger(e.message) - tip_exception("操作失败") - raise ActiveRecord::Rollback + HomeworkEndUpdateScoreJob.perform_later(homework.id) if !homework.allow_late && homework.end_time <= time end + normal_status(0, "更新成功") end def set_public @@ -1156,19 +1114,13 @@ class HomeworkCommonsController < ApplicationController # 删除多个作业 def multi_destroy ActiveRecord::Base.transaction do - begin - homeworks = @course.homework_commons.where(id: params[:homework_ids]) - homeworks.destroy_all - - # 这些写是因为model中的关联删除无法删除is_delete=0的作品 - StudentWork.where(homework_common_id: homeworks.pluck(:id)).destroy_all - normal_status(0, "删除成功") - - rescue Exception => e - uid_logger(e.message) - tip_exception("删除失败") - raise ActiveRecord::Rollback - end + homeworks = @course.homework_commons.where(id: params[:homework_ids]) + homeworks.destroy_all + + # 这些写是因为model中的关联删除无法删除is_delete=0的作品 + StudentWork.where(homework_common_id: homeworks.pluck(:id)).destroy_all + normal_status(0, "删除成功") + end end @@ -1178,41 +1130,35 @@ class HomeworkCommonsController < ApplicationController homeworks.each do |homework| ActiveRecord::Base.transaction do - begin - homework_bank = current_user.homework_banks.find_by(homework_common_id: homework.id) - if homework_bank.present? - # 如果作业加入过题库则更新参数 - if homework_bank.homework_type == 1 - homework_bank.update_attributes!(name: homework.name, description: homework.description, - reference_answer: homework.reference_answer, course_list_id: @course.course_list_id) - elsif homework_bank.homework_type == 3 - homework_detail_group = homework.homework_detail_group - homework_bank.update_attributes!(name: homework.name, description: homework.description, - reference_answer: homework.reference_answer, course_list_id: @course.course_list_id, - min_num: homework_detail_group.min_num, max_num: homework_detail_group.max_num, - base_on_project: homework_detail_group.base_on_project) - end - - # 附件的更新 - homework_bank.attachments.destroy_all - homework.attachments.each do |attachment| - att = attachment.copy - att.author_id = homework_bank.user_id - att.copy_from = attachment.id - homework_bank.attachments << att - end - else - new_homework_bank = add_to_homework_bank_f homework - new_homework_bank.save! + homework_bank = current_user.homework_banks.find_by(homework_common_id: homework.id) + if homework_bank.present? + # 如果作业加入过题库则更新参数 + if homework_bank.homework_type == 1 + homework_bank.update_attributes!(name: homework.name, description: homework.description, + reference_answer: homework.reference_answer, course_list_id: @course.course_list_id) + elsif homework_bank.homework_type == 3 + homework_detail_group = homework.homework_detail_group + homework_bank.update_attributes!(name: homework.name, description: homework.description, + reference_answer: homework.reference_answer, course_list_id: @course.course_list_id, + min_num: homework_detail_group.min_num, max_num: homework_detail_group.max_num, + base_on_project: homework_detail_group.base_on_project) + end - homework.update_attributes!(homework_bank_id: new_homework_bank.id) + # 附件的更新 + homework_bank.attachments.destroy_all + homework.attachments.each do |attachment| + att = attachment.copy + att.author_id = homework_bank.user_id + att.copy_from = attachment.id + homework_bank.attachments << att end + else + new_homework_bank = add_to_homework_bank_f homework + new_homework_bank.save! - rescue Exception => e - uid_logger(e.message) - tip_exception(e.message) - raise ActiveRecord::Rollback + homework.update_attributes!(homework_bank_id: new_homework_bank.id) end + end end normal_status(0, "加入成功") @@ -1229,7 +1175,7 @@ class HomeworkCommonsController < ApplicationController # 班级作品查重 def homework_code_repeat - tip_exception(-1,"分班id不能为空!") if params[:group_ids].nil? + tip_exception(-1, "分班id不能为空!") if params[:group_ids].nil? shixun = @homework.shixuns.take # 通过代码文件来判断语言 language = shixun.challenges.practice_type.pluck(:path).first @@ -1247,16 +1193,16 @@ class HomeworkCommonsController < ApplicationController games.each do |game| game.game_codes.each do |game_code| code_infos << { - path: game_code.path, - content: Base64.urlsafe_encode64(game_code.new_code.to_s, padding: false), - passed_time: game.end_time.try(:strftime, '%Y-%m-%d %H:%M:%S') + path: game_code.path, + content: Base64.urlsafe_encode64(game_code.new_code.to_s, padding: false), + passed_time: game.end_time.try(:strftime, '%Y-%m-%d %H:%M:%S') } end end if code_infos.size != 0 user_lists << { - user_id: user_id, - code_info: code_infos + user_id: user_id, + code_info: code_infos } end end @@ -1270,13 +1216,13 @@ class HomeworkCommonsController < ApplicationController normal_status("代码查重成功") else if result.status == 1 - tip_exception(-4,"代码查重异常,请稍后重试") + tip_exception(-4, "代码查重异常,请稍后重试") else - tip_exception(-3,"正在查重,请在几分钟后刷新页面查看结果") + tip_exception(-3, "正在查重,请在几分钟后刷新页面查看结果") end end else - tip_exception(-2,"平台目前支持java、python语言的查重
其他语言正在规划中,敬请期待") + tip_exception(-2, "平台目前支持java、python语言的查重
其他语言正在规划中,敬请期待") end end @@ -1295,23 +1241,23 @@ class HomeworkCommonsController < ApplicationController student_works = @homework.student_works.where("work_status > 0") # 按分班id搜索 user_ids = - if params[:group_ids] - # 筛选了分班 - group_student_ids = @course.course_members.where(course_group_id: params[:group_ids]).pluck(:user_id) - student_works.where(:user_id => group_student_ids).pluck(:user_id) + if params[:group_ids] + # 筛选了分班 + group_student_ids = @course.course_members.where(course_group_id: params[:group_ids]).pluck(:user_id) + student_works.where(:user_id => group_student_ids).pluck(:user_id) + else + # 如果当前用户有分班 显示分班内的学生,没有则显示全部 + user_ids = @course.user_group_students(current_user.id).pluck(:user_id) + if user_ids.present? + student_works.where(:user_id => user_ids).pluck(:user_id) else - # 如果当前用户有分班 显示分班内的学生,没有则显示全部 - user_ids = @course.user_group_students(current_user.id).pluck(:user_id) - if user_ids.present? - student_works.where(:user_id => user_ids).pluck(:user_id) - else - student_works.pluck(:user_id) - end + student_works.pluck(:user_id) end + end # 查询作品数总数 @all_reviews_count = user_ids.count @users_reviews = @homework.homework_review_results.where("code_rate >= 50.0") - .where(:user_id => user_ids).joins(user: :user_extension) + .where(:user_id => user_ids).joins(user: :user_extension) # 按学号和姓名搜索 if params[:search] @users_reviews = @users_reviews.where("concat(lastname, firstname) like :keyword or student_id like :keyword", keyword: "%#{params[:search]}%") @@ -1325,9 +1271,9 @@ class HomeworkCommonsController < ApplicationController # 如果未分班被查重过,则显示未分班列 @non_course_group = - if @homework.homework_group_reviews.where(course_group_id: 0).count > 0 - @course.course_members.where(role: 4, course_group_id: 0).count - end + if @homework.homework_group_reviews.where(course_group_id: 0).count > 0 + @course.course_members.where(role: 4, course_group_id: 0).count + end # 最新一次的查重时间 @last_review_time = format_time @homework.homework_group_reviews.last.try(:created_at) @@ -1353,38 +1299,38 @@ class HomeworkCommonsController < ApplicationController homework_challenge_settings = @homework.homework_challenge_settings @challenges = @shixun.challenges.where(id: homework_challenge_settings.pluck(:challenge_id), st: 0) @challenges = - @challenges.map do |challenge| - code_rate = 0 - game_codes = results.code_info.select {|info| challenge.path.split(";").include?(info.origin_path)} - # 先判断用户该关卡是否查重了 取多个待补充文件的平均值 - if game_codes.count > 0 - code_rate += game_codes.map(&:rate).sum / challenge.path.split(";").length - end - logger.info("#####game_codes: #{game_codes}") - #target = game_codes.count > 0 ? game_codes[0].target_user_id : nil - # 作品完成时间 - game = challenge.games.find_by(user_id: @user.id) - end_time = game.end_time - # 用户关卡的得分 - all_score = homework_challenge_settings.find_by(challenge_id: challenge.id).try(:score).to_f - final_score = @student_work.work_challenge_score game, all_score, challenge.id - # 抄袭用户 - copy_user = User.find_by_id(game_codes[0].try(:target_user_id)) - copy_end_time = copy_user.games.find_by(challenge_id: challenge.id).try(:end_time) if copy_user.present? - # 代码部分 - code_list = [] - challenge.path.split(";").each do |path| - if code_info.select{|info| path == info.origin_path}.size > 0 - info = code_info.select{|info| path == info.origin_path}[0] - code_list << {path: path, origin_content: info.origin_content, target_content: info.target_content} - end + @challenges.map do |challenge| + code_rate = 0 + game_codes = results.code_info.select {|info| challenge.path.split(";").include?(info.origin_path)} + # 先判断用户该关卡是否查重了 取多个待补充文件的平均值 + if game_codes.count > 0 + code_rate += game_codes.map(&:rate).sum / challenge.path.split(";").length + end + logger.info("#####game_codes: #{game_codes}") + #target = game_codes.count > 0 ? game_codes[0].target_user_id : nil + # 作品完成时间 + game = challenge.games.find_by(user_id: @user.id) + end_time = game.end_time + # 用户关卡的得分 + all_score = homework_challenge_settings.find_by(challenge_id: challenge.id).try(:score).to_f + final_score = @student_work.work_challenge_score game, all_score, challenge.id + # 抄袭用户 + copy_user = User.find_by_id(game_codes[0].try(:target_user_id)) + copy_end_time = copy_user.games.find_by(challenge_id: challenge.id).try(:end_time) if copy_user.present? + # 代码部分 + code_list = [] + challenge.path.split(";").each do |path| + if code_info.select {|info| path == info.origin_path}.size > 0 + info = code_info.select {|info| path == info.origin_path}[0] + code_list << {path: path, origin_content: info.origin_content, target_content: info.target_content} end - # TODO: 这里本来应该前端做的,但是现在页面已经刷不开了。 - {code_rate: code_rate, copy_user_id: copy_user.try(:id), end_time: end_time, final_score: final_score, - all_score: all_score, copy_end_time: copy_end_time, copy_username: copy_user.try(:full_name), - username: game.user.full_name, code_list: code_list, subject: challenge.subject, position: challenge.position, - id: challenge.id} end + # TODO: 这里本来应该前端做的,但是现在页面已经刷不开了。 + {code_rate: code_rate, copy_user_id: copy_user.try(:id), end_time: end_time, final_score: final_score, + all_score: all_score, copy_end_time: copy_end_time, copy_username: copy_user.try(:full_name), + username: game.user.full_name, code_list: code_list, subject: challenge.subject, position: challenge.position, + id: challenge.id} + end else if results.status == 1 @@ -1461,8 +1407,8 @@ class HomeworkCommonsController < ApplicationController user_rate = 0 # 计算每个关卡的相似度 challenges.each do |challenge| - game_codes = results.user_lists.select{|user_list| user_list.user_id == user && - challenge.path.split(";").include?(user_list.origin_path)} + game_codes = results.user_lists.select {|user_list| user_list.user_id == user && + challenge.path.split(";").include?(user_list.origin_path)} # 先判断用户该关卡是否查重了 取多个待补充文件的平均值 if game_codes.count > 0 user_rate += game_codes.map(&:rate).sum / challenge.path.split(";").length From ea9925f2b092b26c05343acba8d309ba1ee2e4f7 Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Fri, 6 Mar 2020 20:48:58 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/examination_banks_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/examination_banks_controller.rb b/app/controllers/examination_banks_controller.rb index cc34d9fea..3df11a432 100644 --- a/app/controllers/examination_banks_controller.rb +++ b/app/controllers/examination_banks_controller.rb @@ -36,8 +36,8 @@ class ExaminationBanksController < ApplicationController end current_user.item_baskets.destroy_all + render_ok({exam_id: exam.id}) end - render_ok rescue ApplicationService::Error => ex render_error(ex.message) end From 17ef1d3a2af2425c6f73e2428384ffef63cdffb2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=9E=97?= <904079904@qq.com> Date: Fri, 6 Mar 2020 21:08:28 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=A2=98=E5=BA=93?= =?UTF-8?q?=E5=8F=AF=E4=BB=A5=E8=BE=93=E5=85=A5=E7=A9=BA=E6=A0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../question/component/ChoquesEditor.js | 73 +++++-------------- .../question/component/JudquestionEditor.js | 60 +++++---------- .../question/component/SingleEditor.js | 64 ++++++---------- public/react/src/modules/tpm/NewHeader.js | 30 ++++---- 4 files changed, 78 insertions(+), 149 deletions(-) diff --git a/public/react/src/modules/question/component/ChoquesEditor.js b/public/react/src/modules/question/component/ChoquesEditor.js index 725817d17..d2a0b231b 100644 --- a/public/react/src/modules/question/component/ChoquesEditor.js +++ b/public/react/src/modules/question/component/ChoquesEditor.js @@ -229,22 +229,9 @@ class ChoquesEditor extends Component{ var texts; const _text = quill.getText(); const reg = /^[\s\S]*.*[^\s][\s\S]*$/; - - - - - if(this.isNull(_text)===true){ - - return - } - if (!reg.test(_text)) { // 处理编辑器内容为空 - try { - texts=JSON.stringify(value); - }catch (e) { texts=""; - } } else { if(_text.length>=500){ var result = _text.substring(0,450); @@ -298,66 +285,46 @@ class ChoquesEditor extends Component{ // debugger const _text = quill.getText(); const reg = /^[\s\S]*.*[^\s][\s\S]*$/; - - if(this.isNull(_text)===true){ - this.setState({ - question_titleysl:"" - }) - return - } - - if (!reg.test(_text)) { // 处理编辑器内容为空 - try { - this.setState({ - question_titleysl: JSON.stringify(value) - }) - }catch (e) { this.setState({ question_titleysl:"" }) - } } else { // 提交到后台的内容需要处理一下; - let texts=""; - texts = JSON.stringify(value); - this.setState({ - question_titleysl:texts - }) + try { + let texts = JSON.stringify(value); + this.setState({ + question_titleysl:texts + }) + }catch (e) { + this.setState({ + question_titleysl:"" + }) + } } } onContentChanges=(value,quill)=>{ const _text = quill.getText(); const reg = /^[\s\S]*.*[^\s][\s\S]*$/; - - - if(this.isNull(_text)===true){ - this.setState({ - question_titlesysl:"" - }) - return - } - if (!reg.test(_text)) { // 处理编辑器内容为空 - try { - this.setState({ - question_titlesysl: JSON.stringify(value) - }) - }catch (e) { this.setState({ question_titlesysl:"" }) - } } else { // 提交到后台的内容需要处理一下; - let texts=""; + try { + let texts = JSON.stringify(value); + this.setState({ + question_titlesysl:texts + }) + }catch (e) { + this.setState({ + question_titlesysl:"" + }) + } - texts = JSON.stringify(value); - this.setState({ - question_titlesysl:texts - }) } } diff --git a/public/react/src/modules/question/component/JudquestionEditor.js b/public/react/src/modules/question/component/JudquestionEditor.js index 603fbd6e7..868700c6b 100644 --- a/public/react/src/modules/question/component/JudquestionEditor.js +++ b/public/react/src/modules/question/component/JudquestionEditor.js @@ -303,72 +303,50 @@ class JudquestionEditor extends Component{ // console.log(quill); const _text = quill.getText(); const reg = /^[\s\S]*.*[^\s][\s\S]*$/; - // console.log(_text); - // console.log(_text.length); - if(this.isNull(_text)===true){ - this.setState({ - question_titleysl:"" - }) - return - } - if (!reg.test(_text)) { // 处理编辑器内容为空 - try { this.setState({ - question_titleysl:JSON.stringify(value) + question_titleysl:"" + }) + // console.log("空"); + } else { + // 提交到后台的内容需要处理一下; + try { + let texts = JSON.stringify(value); + this.setState({ + question_titleysl:texts }) }catch (e) { this.setState({ question_titleysl:"" }) } - - // console.log("空"); - } else { - // console.log("有"); - - // 提交到后台的内容需要处理一下; - let texts=""; - texts = JSON.stringify(value); - this.setState({ - question_titleysl:texts - }) } } onContentChanges=(value,quill)=>{ const _text = quill.getText(); const reg = /^[\s\S]*.*[^\s][\s\S]*$/; - - if(this.isNull(_text)===true){ - this.setState({ - question_titlesysl:"" - }) - return - } if (!reg.test(_text)) { // 处理编辑器内容为空 - try { - this.setState({ - question_titlesysl:JSON.stringify(value) - }) - }catch (e) { this.setState({ question_titlesysl:"" }) - } - } else { // 提交到后台的内容需要处理一下; - let texts=""; + try { - texts = JSON.stringify(value); - this.setState({ - question_titlesysl:texts - }) + let texts = JSON.stringify(value); + this.setState({ + question_titlesysl:texts + }) + }catch (e) { + this.setState({ + question_titlesysl:"" + }) + } } } render() { diff --git a/public/react/src/modules/question/component/SingleEditor.js b/public/react/src/modules/question/component/SingleEditor.js index 464eb19e0..fab9170b8 100644 --- a/public/react/src/modules/question/component/SingleEditor.js +++ b/public/react/src/modules/question/component/SingleEditor.js @@ -140,7 +140,13 @@ class SingleEditor extends Component{ // this.refs['titleEditor'].showError() this.props.showNotification('请您输入题干'); return editordata; + }else{ + console.log("question_titleysl"); + console.log(question_titleysl); } + + + for(let i = 0; i < question_choices.length; i++) { if (!question_choices[i]) { // this.refs[`optionEditor${i}`].showError() @@ -244,6 +250,7 @@ class SingleEditor extends Component{ this.setState({ standard_answers }) } onOptionContentChange = (value,quill,index) => { + debugger if (index >= this.state.question_choices.length) { // TODO 新建,然后删除CD选项,再输入题干,会调用到这里,且index是3 return; @@ -251,18 +258,9 @@ class SingleEditor extends Component{ var texts; const _text = quill.getText(); const reg = /^[\s\S]*.*[^\s][\s\S]*$/; - - - if(this.isNull(_text)===true){ - return - } if (!reg.test(_text)) { // 处理编辑器内容为空 - try { - texts= JSON.stringify(value) - }catch (e) { texts=""; - } } else { if(_text.length>=500){ var result = _text.substring(0,450); @@ -315,61 +313,47 @@ class SingleEditor extends Component{ const reg = /^[\s\S]*.*[^\s][\s\S]*$/; - - if(this.isNull(_text)===true){ - this.setState({ - question_titleysl:"" - }) - return - } - - - if (!reg.test(_text)) { // 处理编辑器内容为空 - try { - this.setState({ - question_titleysl: JSON.stringify(value) - }) - }catch (e) { this.setState({ question_titleysl:"" }) - } } else { + try { let texts = JSON.stringify(value); - this.setState({ - question_titleysl:texts - }) + this.setState({ + question_titleysl:texts===undefined|| null?"":texts + }) + }catch (e) { + this.setState({ + question_titleysl:"" + }) + } } } onContentChanges=(value,quill)=>{ const _text = quill.getText(); const reg = /^[\s\S]*.*[^\s][\s\S]*$/; - if(this.isNull(_text)===true){ - this.setState({ - question_titlesysl:"" - }) - return - } + if (!reg.test(_text)) { // 处理编辑器内容为空 + this.setState({ + question_titlesysl:"" + }) + } else { try { + let texts = JSON.stringify(value); this.setState({ - question_titlesysl:JSON.stringify(value) + question_titlesysl:texts===undefined|| null?"":texts }) }catch (e) { this.setState({ question_titlesysl:"" }) } - } else { - let texts = JSON.stringify(value); - this.setState({ - question_titlesysl:texts - }) + } } handleShowImage = (url) => { diff --git a/public/react/src/modules/tpm/NewHeader.js b/public/react/src/modules/tpm/NewHeader.js index 8d3c85378..dccdbc5a7 100644 --- a/public/react/src/modules/tpm/NewHeader.js +++ b/public/react/src/modules/tpm/NewHeader.js @@ -1075,21 +1075,21 @@ submittojoinclass=(value)=>{ ` } - {/*{*/} - {/* Periofters===true?*/} - {/*
  • */} - {/* */} - {/*
    */} - {/*
    */} - {/* 题库*/} - {/*
    */} - {/*
    */} - {/*
    */} - {/*
  • */} - {/* :""*/} - {/*}*/} + { + Periofters===true? +
  • + +
    +
    + 题库 +
    +
    +
    +
  • + :"" + }
  • Date: Fri, 6 Mar 2020 21:09:09 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/react/src/modules/tpm/NewHeader.js | 30 +++++++++++------------ 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/public/react/src/modules/tpm/NewHeader.js b/public/react/src/modules/tpm/NewHeader.js index dccdbc5a7..8d3c85378 100644 --- a/public/react/src/modules/tpm/NewHeader.js +++ b/public/react/src/modules/tpm/NewHeader.js @@ -1075,21 +1075,21 @@ submittojoinclass=(value)=>{ ` } - { - Periofters===true? -
  • - -
    -
    - 题库 -
    -
    -
    -
  • - :"" - } + {/*{*/} + {/* Periofters===true?*/} + {/*
  • */} + {/* */} + {/*
    */} + {/*
    */} + {/* 题库*/} + {/*
    */} + {/*
    */} + {/*
    */} + {/*
  • */} + {/* :""*/} + {/*}*/}