Merge branch 'dev_aliyun' into develop

ecloud_sso
daiao 5 years ago
commit 8384178359

@ -7,7 +7,7 @@ class Admins::DisciplinesController < Admins::BaseController
def create
name = params[:name].to_s.strip
return render_error('名称重复') if Discipline.where(name: name).exists?
Discipline.create!(name: name, position: Discipline.all.pluck(:position).max + 1)
Discipline.create!(name: name, position: Discipline.all.pluck(:position).max.to_i + 1)
render_ok
end
@ -46,7 +46,7 @@ class Admins::DisciplinesController < Admins::BaseController
end
def adjust_position
max_position = Discipline.all.pluck(:position).max
max_position = Discipline.all.pluck(:position).max.to_i
opr = params[:opr] || "down"
if (params[:opr] == "up" && current_discipline.position == 1) || (params[:opr] == "down" && current_discipline.position == max_position)
@message = "超出范围"

@ -9,7 +9,7 @@ class Admins::SubDisciplinesController < Admins::BaseController
name = params[:name].to_s.strip
return render_error('名称不能为空') if name.blank?
return render_error('名称重复') if current_discipline.sub_disciplines.where(name: name).exists?
SubDiscipline.create!(name: name, discipline_id: current_discipline.id, position: current_discipline.sub_disciplines.pluck(:position).max + 1)
SubDiscipline.create!(name: name, discipline_id: current_discipline.id, position: current_discipline.sub_disciplines.pluck(:position).max.to_i + 1)
render_ok
end
@ -47,7 +47,7 @@ class Admins::SubDisciplinesController < Admins::BaseController
def adjust_position
discipline = current_sub_discipline.discipline
max_position = discipline.sub_disciplines.pluck(:position).max
max_position = discipline.sub_disciplines.pluck(:position).max.to_i
opr = params[:opr] || "down"
if (params[:opr] == "up" && current_sub_discipline.position == 1) || (params[:opr] == "down" && current_sub_discipline.position == max_position)
@message = "超出范围"

@ -9,7 +9,7 @@ class Admins::TagDisciplinesController < Admins::BaseController
name = params[:name].to_s.strip
return render_error('名称重复') if current_sub_discipline.tag_disciplines.where(name: name).exists?
TagDiscipline.create!(name: name, sub_discipline_id: current_sub_discipline.id, user_id: current_user.id,
position: current_sub_discipline.tag_disciplines.pluck(:position).max + 1)
position: current_sub_discipline.tag_disciplines.pluck(:position).max.to_i + 1)
render_ok
end
@ -42,7 +42,7 @@ class Admins::TagDisciplinesController < Admins::BaseController
def adjust_position
sub_discipline = current_tag_discipline.sub_discipline
max_position = sub_discipline.tag_disciplines.pluck(:position).max
max_position = sub_discipline.tag_disciplines.pluck(:position).max.to_i
opr = params[:opr] || "down"
if (params[:opr] == "up" && current_tag_discipline.position == 1) || (params[:opr] == "down" && current_tag_discipline.position == max_position)
@message = "超出范围"

@ -395,9 +395,7 @@ class CoursesController < ApplicationController
def destroy
if @course.is_delete == 0
@course.delete!
Tiding.where(belong_container: @course).update_all(is_delete: 1)
Tiding.create!(user_id: current_user.id, trigger_user_id: current_user.id, container_id: @course.id,
container_type: 'DeleteCourse', tiding_type: 'System', belong_container: @course, extra: @course.name)
DeleteCourseNotifyJob.perform_later(@course.id, current_user.id)
normal_status(0, "成功")
else
normal_status(-1, "课堂已删除,无需重复操作")

@ -87,16 +87,16 @@ class HomeworkCommonsController < ApplicationController
end
@task_count = @homework_commons.size
order_str = @homework_type == 4 ? "position DESC" : "IF(ISNULL(homework_commons.publish_time),0,1), homework_commons.publish_time DESC,
order_str = @homework_type == 4 ? "homework_commons.position DESC" : "IF(ISNULL(homework_commons.publish_time),0,1), homework_commons.publish_time DESC,
homework_commons.created_at DESC"
@homework_commons = @homework_commons.order(order_str).page(page).per(15)
if @homework_type == 4
@homework_commons = @homework_commons.includes(:homework_detail_manual, :published_settings, :shixuns)
@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_detail_group)
@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_commons = @homework_commons.includes(:homework_detail_manual, :published_settings, :homework_group_settings, :course_second_category, user: :user_extension)
end
end
@ -902,7 +902,8 @@ class HomeworkCommonsController < ApplicationController
def publish_groups
@current_user = current_user
if @homework.publish_immediately @current_user
charge_ids = @course.charge_group_ids(@current_user)
if @homework.publish_immediately charge_ids
# 可立即发布的分班:当前用户管理的分班去除已发布的分班
group_ids = @course.charge_group_ids(@current_user) - @homework.homework_group_settings.group_published.pluck(:course_group_id)
@course_groups = @course.course_groups.where(id: group_ids)
@ -984,7 +985,7 @@ class HomeworkCommonsController < ApplicationController
homework.homework_detail_manual.update_attributes!(comment_status: 1)
if homework.course_act.blank?
homework.course_act << CourseActivity.new(user_id: homework.user_id, course_id: homework.course_id)
CourseActivity.create!(user_id: homework.user_id, course_id: homework.course_id, course_act: homework)
end
# 发消息
HomeworkCommonPushNotifyJob.perform_later(homework.id, tiding_group_ids)
@ -1031,7 +1032,8 @@ class HomeworkCommonsController < ApplicationController
def end_groups
@current_user = current_user
if @homework.end_immediately @current_user
charge_ids = @course.charge_group_ids(@current_user)
if @homework.end_immediately charge_ids
# 可立即截止的分班:统一设置则是用户管理的所有分班,否则是当前用户管理的分班中已发布且未截止的
charge_group_ids = @course.charge_group_ids(@current_user) # 当前用户管理的分班
group_ids = @homework.unified_setting ? charge_group_ids :
@ -1117,7 +1119,7 @@ class HomeworkCommonsController < ApplicationController
def choose_category
@main_catrgory = @course.course_modules.where(module_type: "shixun_homework")
@homework_category = @main_catrgory.take.course_second_categories
@homework_category = @main_catrgory.take.course_second_categories.includes(:homework_commons)
end
# 实训作业移动到目录
@ -1313,7 +1315,7 @@ class HomeworkCommonsController < ApplicationController
# 最新一次的查重时间
@last_review_time = format_time @homework.homework_group_reviews.last.try(:created_at)
@charge_ids = @course.charge_group_ids(@current_user)
end
# 代码查重代码的详情

@ -34,8 +34,9 @@ class ItemBasketsController < ApplicationController
def delete_item_type
baskets = basket_items.where(item_type: params[:item_type])
item_ids = baskets.pluck(:item_bank_id)
baskets.destroy_all
render_ok
render_ok({item_ids: item_ids})
end
def set_score

@ -5,7 +5,7 @@ class TagDisciplinesController < ApplicationController
sub_discipline = SubDiscipline.find_by!(id: params[:sub_discipline_id])
tip_exception("重复的知识点") if sub_discipline.tag_disciplines.exists?(name: params[:name].to_s.strip)
tag_discipline = TagDiscipline.create!(name: params[:name].to_s.strip, sub_discipline: sub_discipline, user_id: current_user.id,
position: sub_discipline.tag_disciplines.pluck(:position).max + 1)
position: sub_discipline.tag_disciplines.pluck(:position).max.to_i + 1)
render_ok({tag_discipline_id: tag_discipline.id})
end
end

@ -9,7 +9,7 @@ class Weapps::ChallengesController < Weapps::BaseController
play = @shixun.is_jupyter? || @shixun.vnc ||
@shixun.hide_code? || (@shixun.small_mirror_name & ["Css", "Html", "Web"]).present?
if play
if @challenge.st != 1 && play
normal_status(-5, "该关卡暂不支持小程序")
else
render_ok

@ -20,6 +20,7 @@ class Weapps::CoursesController < Weapps::BaseController
activities = @course.course_activities.where("course_act_type in ('Course', 'CourseMessage') or
(course_act_type = 'HomeworkCommon' and course_act_id in #{homework_ids})").order("id desc")
@activities_count = activities.size
@activities = paginate activities.includes(:course_act, user: :user_extension)
end

@ -42,6 +42,14 @@ module CoursesHelper
end
end
def practice_homework_count course
homeworks = course.homework_commons.practices
publish_count = homeworks.select{|homework| homework.publish_time.present? && homework.publish_time <= Time.now}.size
unpublish_count = homeworks.select{|homework| homework.publish_time.nil? || homework.publish_time > Time.now}.size
all_count = homeworks.size
{publish_count: publish_count, unpublish_count: unpublish_count, all_count: all_count}
end
# 课堂模块的url
def module_url mod, course
return nil if mod.blank? or course.blank?

@ -183,7 +183,7 @@ module HomeworkCommonsHelper
student_works = homework_common.teacher_works(member)
count[:commit_count] = student_works.select{|work| work.work_status != 0 }.size
count[:uncommit_count] = student_works.select{|work| work.work_status == 0 }.size
count[:compelete_count] = Myshixun.where(id: student_works.pluck(:myshixun_id).reject(&:blank?), status: 1).size
count[:compelete_count] = Myshixun.where(id: student_works.pluck(:myshixun_id).reject{|ms| ms==0}, status: 1).size
count[:all_count] = student_works.size
count
end

@ -0,0 +1,13 @@
# 删除课堂时将相应的课堂消息置为删除状态,并给老师发送删除消息
class DeleteCourseNotifyJob < ApplicationJob
queue_as :default
def perform(course_id, user_id)
course = Course.find_by(id: course_id)
return if course.blank?
Tiding.where(belong_container: course).update_all(is_delete: 1)
Tiding.create!(user_id: user_id, trigger_user_id: user_id, container_id: course.id,
container_type: 'DeleteCourse', tiding_type: 'System', belong_container: course, extra: course.name)
end
end

@ -257,7 +257,7 @@ class Course < ApplicationRecord
# 老师负责的分班id
def charge_group_ids user
member = course_member(user.id)
member = user.is_a?(CourseMember) ? user : course_member(user.id)
group_ids = if member.present?
member.teacher_course_groups.size > 0 ? member.teacher_course_groups.pluck(:course_group_id) : course_groups.pluck(:id)
elsif user.admin_or_business?
@ -302,7 +302,7 @@ class Course < ApplicationRecord
#课程动态公共表记录
def act_as_course_activity
self.course_act << CourseActivity.new(user_id: tea_id, course_id: id)
CourseActivity.create(user_id: tea_id, course_id: id, course_act: self)
end
# 当前老师分班下的所有学生

@ -30,7 +30,7 @@ class CourseMessage < ApplicationRecord
#课程动态公共表记录
def act_as_course_activity
self.course_act << CourseActivity.new(user_id: course_message_id, course_id: course_id)
CourseActivity.create(user_id: course_message_id, course_id: course_id, course_act: self)
end
def send_deal_tiding deal_status

@ -12,4 +12,13 @@ class CourseSecondCategory < ApplicationRecord
category_type == "graduation" && name == "毕设任务" ? "graduation_tasks" : category_type
)
end
def homework_publish_count
homework_commons.select{|homework| homework.publish_time.present? && homework.publish_time <= Time.now}.size
end
def homework_unpublish_count
homework_commons.select{|homework| homework.publish_time.nil? || homework.publish_time > Time.now}.size
end
end

@ -141,15 +141,17 @@ class HomeworkCommon < ApplicationRecord
end
# 作业能否立即发布
def publish_immediately user
homework_detail_manual.try(:comment_status) == 0 || homework_group_settings.where(course_group_id: course.charge_group_ids(user)).
none_published.count > 0
def publish_immediately charge_ids
homework_detail_manual.try(:comment_status) == 0 ||
homework_group_settings.select{|setting| charge_ids.include?(setting.course_group_id) &&
(setting.publish_time.nil? || setting.publish_time > Time.now)}.size > 0
end
# 作业能否立即截止
def end_immediately user
(unified_setting && homework_detail_manual.try(:comment_status) == 1 && end_time > Time.now) || homework_group_settings.
where(course_group_id: course.charge_group_ids(user)).published_no_end.count > 0
def end_immediately charge_ids
(unified_setting && homework_detail_manual.try(:comment_status) == 1 && end_time.present? && end_time > Time.now) ||
homework_group_settings.select{|setting| charge_ids.include?(setting.course_group_id) &&
!setting.publish_time.nil? && setting.publish_time < Time.now && setting.end_time > Time.now}.size > 0
end
# 学生是否提交了作品

@ -118,8 +118,8 @@ class User < ApplicationRecord
has_many :manage_courses, through: :manage_course_members, source: :course
# 关注
has_many :be_watchers, foreign_key: :user_id, dependent: :destroy # 我的关注
has_many :be_watcher_users, through: :be_watchers, dependent: :destroy # 我关注的用户
# has_many :be_watchers, foreign_key: :user_id, dependent: :destroy # 我的关注
# has_many :be_watcher_users, through: :be_watchers, dependent: :destroy # 我关注的用户
# 认证
has_many :apply_user_authentication
@ -726,8 +726,8 @@ class User < ApplicationRecord
end
def validate_sensitive_string
raise("真实姓名包含敏感词汇,请重新输入") if lastname && !HarmoniousDictionary.clean?(lastname)
raise("昵称包含敏感词汇,请重新输入") if nickname && !HarmoniousDictionary.clean?(nickname)
raise("真实姓名包含敏感词汇,请重新输入#{lastname}") if lastname && !HarmoniousDictionary.clean?(lastname)
raise("昵称包含敏感词汇,请重新输入#{nickname}") if nickname && !HarmoniousDictionary.clean?(nickname)
end
def set_laboratory

@ -29,14 +29,14 @@ class Admins::ImportDisciplineService < ApplicationService
return unless discipline_name.present?
discipline = Discipline.find_by(name: discipline_name)
if discipline.blank?
discipline = Discipline.create!(name: discipline_name, position: Discipline.all.pluck(:position).max + 1)
discipline = Discipline.create!(name: discipline_name, position: Discipline.all.pluck(:position).max.to_i + 1)
count += 1
end
if sub_discipline_name.present?
sub_discipline = SubDiscipline.find_by(name: discipline_name, discipline: discipline)
if sub_discipline.blank?
SubDiscipline.create!(name: sub_discipline_name, discipline: discipline, position: discipline.sub_disciplines.pluck(:position).max + 1)
SubDiscipline.create!(name: sub_discipline_name, discipline: discipline, position: discipline.sub_disciplines.pluck(:position).max.to_i + 1)
count += 1
end
end

@ -14,7 +14,7 @@ class Oauth::CreateORFindCasUserService < ApplicationService
return [open_user.user, false] if open_user.persisted?
@user = User.new(login: User.generate_login('C'), type: 'User', status: User::STATUS_ACTIVE, nickname: @params['comsys_name'], lastname: @params['comsys_name'])
@user = User.new(login: "tfxy#{@params['user']}", type: 'User', status: User::STATUS_ACTIVE, lastname: @params['comsys_name'])
ActiveRecord::Base.transaction do
@user.save!

@ -1,5 +1,6 @@
# 教师身份的立即发布、立即截止、代码查重入口的判断
json.publish_immediately identity < Course::STUDENT && homework.publish_immediately(user)
json.end_immediately identity < Course::STUDENT && homework.end_immediately(user)
charge_ids = homework.course.charge_group_ids(user)
json.publish_immediately identity < Course::STUDENT && homework.publish_immediately(charge_ids)
json.end_immediately identity < Course::STUDENT && homework.end_immediately(charge_ids)
json.code_review identity < Course::STUDENT && homework.code_review if homework.homework_type == 'practice'
json.view_answer homework.view_answer(identity, user.id) if homework.homework_type != "practice"

@ -1,8 +1,15 @@
json.main_category main_catrgory do |category|
json.main_category_id 0
json.main_category_name category.module_name
homework_count = practice_homework_count category.course
json.publish_count homework_count[:publish_count]
json.unpublish_count homework_count[:unpublish_count]
json.all_count homework_count[:all_count]
end
json.homework_category homework_category do |category|
json.category_id category.id
json.category_name category.name
json.publish_count category.homework_publish_count
json.unpublish_count category.homework_unpublish_count
json.all_count category.homework_commons.size
end

@ -1,7 +1,9 @@
json.partial! "homework_public_navigation", locals: {homework: @homework, course: @course, user: @current_user}
json.last_review_time @last_review_time
json.publish_immediately @user_course_identity < Course::STUDENT && @homework.publish_immediately(@current_user)
json.end_immediately @user_course_identity < Course::STUDENT && @homework.end_immediately(@current_user)
json.publish_immediately @user_course_identity < Course::STUDENT && @homework.publish_immediately(@charge_ids)
json.end_immediately @user_course_identity < Course::STUDENT && @homework.end_immediately(@charge_ids)
# 分班情况
json.group_info do

@ -24,6 +24,10 @@ json.homeworks @homework_commons.each do |homework|
# 只有在主目录才显示
json.upper_category_name homework.course_second_category&.name unless params[:category]
charge_ids = @course.charge_group_ids(@member)
json.publish_immediately @user_course_identity < Course::STUDENT && homework.publish_immediately(charge_ids)
json.end_immediately @user_course_identity < Course::STUDENT && homework.end_immediately(charge_ids)
unless curr_status[:status].include?("未发布")
work_count = calculate_work_count homework, @member
json.commit_count work_count[:commit_count]

@ -6,7 +6,8 @@ json.activities @activities do |activity|
json.login user.login
json.img url_to_avatar(user)
end
json.created_at activity.created_at.strftime('%m-%d %H:%M:')
json.created_at activity.created_at.strftime('%m-%d %H:%M')
json.container_name activity.container_name
json.container_type activity.course_act_type == "HomeworkCommon" ? activity.course_act&.homework_type : ""
end
end
json.activities_count @activities_count

@ -357,7 +357,6 @@ H漫画
学生暴动
镇压学生
广安第二人民医院
胡新宇
趙紫陽
自由亚州
践踏中国女性
@ -682,7 +681,6 @@ A片
被迫
被逼
强暴
口技
破处
精液
幼交
@ -996,7 +994,6 @@ A片
李少民
李淑娴
李旺阳
李文斌
李月月鸟
李志绥
连胜德
@ -1157,7 +1154,6 @@ A片
信用危机
邢铮
熊炎
熊焱
徐邦秦
徐才厚
徐匡迪
@ -1194,7 +1190,6 @@ A片
张伯笠
张宏堡
张万年
张伟国
张昭富
张志清
赵海青

@ -45,7 +45,7 @@ namespace :homework_publishtime do
end
end
homework.course_act << CourseActivity.new(user_id: homework.user_id, course_id: homework.course_id) if !homework.course_act.present?
CourseActivity.create(user_id: homework.user_id, course_id: homework.course_id, course_act: homework) if !homework.course_act.present?
end
# 分组设置发布时间的作业

@ -0,0 +1,257 @@
desc "同步天府学院数据, 执行顺序依次 import_teaches、 import_courses、 import_students、import_course_members"
namespace :tfxy do
xlsx =Roo::Spreadsheet.open(Rails.root.join("tfxy.xlsx").to_s)
task import_teaches: :environment do
desc "同步天府学院老师数据"
xlsx =Roo::Spreadsheet.open(Rails.root.join("tfxy.xlsx").to_s)
school = School.find_or_create_by(name: '西南财经大学天府学院') do |d|
d.province = '四川省'
d.city = '成都'
end
#导入教师用户
teach_data = xlsx.sheet(3)
teach_data_last_row = teach_data.last_row
2.upto(teach_data_last_row) do |r|
old_user = User.where("phone = '#{teach_data.cell(r, 5)}' OR mail = '#{teach_data.cell(r, 6)}' OR login = 'tfxy#{teach_data.cell(r, 1)}' " )
if !old_user.present?
user = User.new(
phone: teach_data.cell(r, 5),
login: "tfxy#{teach_data.cell(r, 1)}",
type: 'User',
status: User::STATUS_ACTIVE,
lastname: teach_data.cell(r, 2),
nickname: teach_data.cell(r, 2),
password: "Edu#{teach_data.cell(r, 5)}",
mail: teach_data.cell(r, 6),
profile_completed: true,
professional_certification: 1,
certification: 1,
authentication: true,
laboratory_id: Laboratory.find(1)&.id
)
if user.save!
departemnt = school.departments.find_or_create_by!(name: teach_data.cell(r, 4))
user.create_user_extension!(
school_id: school.id,
location: school.province,
location_city: school.city,
gender: teach_data.cell(r, 3) == '女' ? 1 : 0,
identity: 0,
technical_title: '教师',
department_id: departemnt.id
)
open_user = OpenUsers::Cas.find_or_initialize_by(uid: teach_data.cell(r, 1)) do |u|
u.extra = {phone: teach_data.cell(r, 8)}
u.user_id = user.id
end
p "-------user -----#{user.inspect}"
open_user.save
end
else
old_user.update(
lastname: teach_data.cell(r, 2),
nickname: teach_data.cell(r, 2),
certification: true,
professional_certification: true,
authentication: true,
profile_completed: true)
OpenUsers::Cas.find_or_create_by(uid: teach_data.cell(r, 1)) do |u|
u.extra = {phone: teach_data.cell(r, 5)}
u.user_id = old_user.id
end
end
end
end
task import_courses: :environment do
desc "同步天府学院课堂数据"
school = School.find_or_create_by(name: '西南财经大学天府学院') do |d|
d.province = '四川省'
d.city = '成都'
end
course_info = {"C程序设计与实践"=>4, "数据库技术应用"=>2, "数据库应用"=>2, "数据库原理"=>2, "数据库实践"=>2, "面向对象程序设计与实践"=>2, "JavaSE程序设计及实践辅修"=>4, "编译原理"=>2, "电路与电子技术"=>3, "传感器原理与应用"=>3, "物联网技术与应用"=>2, "人工智能实践"=>3, "计算机组成原理"=>2, "移动应用开发实训"=>4, "面向对象程序课程设计"=>1, "Web程序设计"=>2, "数据仓库与数据挖掘"=>2, "定量分析技术"=>4, "Python程序设计"=>4, "信息系统分析与设计"=>3, "数据处理综合实训"=>2, "绘画基础Ⅱ(色彩构成)"=>2, "数字图像处理"=>4, "虚拟现实技术及应用"=>4, "三维建模技术"=>4, "游戏技术基础"=>4, "传感器与单片机实训"=>2, "数据库原理与实践"=>4, "高级程序设计(二)"=>4, "数据结构与算法分析"=>4, "实训"=>1, "Linux 操作系统"=>4, "Java Web程序设计与实践"=>8, "软件测试与项目管理"=>4, "Android程序设计"=>8, "移动应用开发"=>4, "商业智能案例分析"=>4, "数据分析与挖掘"=>4, "Oracle DBA"=>4, "信息网络安全测试与评估"=>4, "Android编程"=>8, "电子线路CAD设计"=>2, "ARM接口技术"=>4, "嵌入式Linux应用系统设计"=>4, "信息系统开发实训"=>2, "绘画基础I平面构成"=>2, "智能信息处理技术"=>3}
course_data = xlsx.sheet(4)
course_data_last_row = course_data.last_row
2.upto(course_data_last_row) do |r|
course_group = CourseGroup.find_or_initialize_by(invite_code: course_data.cell(r, 3))
teach_user = OpenUsers::Cas.find_by(uid: course_data.cell(r, 5))&.user
puts "----teach_user-----uid-----#{course_data.cell(r, 5)}------#{teach_user.inspect}---"
if !course_group.persisted? && teach_user.present?
course = Course.find_or_initialize_by(school_id: school.id, name: course_data.cell(r, 2)) do |d|
d.is_public = 0
d.tea_id = teach_user.id
d.laboratory_id = Laboratory.find(1)&.id
d.credit = course_info[course_data.cell(r, 1)]
end
if !course.persisted?
# 创建课堂
course_list = CourseList.find_or_initialize_by(name: course_data.cell(r, 2), user_id: teach_user.id) do |d|
d.is_admin = 0
end
course.course_list = course_list
course.invite_code = course_data.cell(r, 1)[3..7]
course.save!
CourseInfo.create!(user_id: teach_user.id, course_id: course.id)
course.create_course_modules(["shixun_homework", "common_homework", "group_homework", "exercise", "attachment", "course_group", "video"])
end
course_group.position = course.course_groups_count + 1
course_group.name = course_data.cell(r, 4)
course_group.course = course
course_group.save!
puts "---course_group----#{course_group.inspect}"
course_member = CourseMember.find_or_initialize_by(course_id: course.id, user_id: teach_user.id) do |d|
d.role = 2
d.course_group_id = 0
end
course_member.save! if !course_member.persisted?
TeacherCourseGroup.create!(course_id: course.id, course_member_id: course_member.id, user_id: teach_user.id, course_group_id: course_group.id)
end
end
end
task import_students: :environment do
desc "同步天府学院学生数据"
student_data = xlsx.sheet(5)
student_data_last_row = student_data.last_row
school = School.find_or_create_by(name: '西南财经大学天府学院') do |d|
d.province = '四川省'
d.city = '成都'
end
2.upto(student_data_last_row) do |r|
# 邮箱存在
if student_data.cell(r, 9).present?
old_user = User.where("phone = '#{student_data.cell(r, 8)}' OR mail = '#{student_data.cell(r, 9)}' OR login = 'tfxy#{student_data.cell(r, 1)}' " ).first
else
old_user = User.where("phone = '#{student_data.cell(r, 8)}' OR login = 'tfxy#{student_data.cell(r, 1)}' " ).first
end
if !old_user.present?
user = User.new(
phone: student_data.cell(r, 8),
login: "tfxy#{student_data.cell(r, 1)}",
type: 'User',
status: User::STATUS_ACTIVE,
lastname: student_data.cell(r, 2),
nickname: student_data.cell(r, 2),
password: "Edu#{student_data.cell(r, 1)}",
mail: student_data.cell(r, 9),
profile_completed: true,
professional_certification: 1,
certification: 1,
authentication: true,
laboratory_id: Laboratory.find(1)&.id
)
puts "----user #{user.inspect}"
if user.save!
departemnt = school.departments.find_or_create_by!(name: student_data.cell(r, 4))
user.create_user_extension!(
school_id: school.id,
location: school.province,
location_city: school.city,
gender: student_data.cell(r, 3) == '女' ? 1 : 0,
identity: 1,
student_id: student_data.cell(r, 1),
department_id: departemnt.id
)
OpenUsers::Cas.find_or_create_by(uid: student_data.cell(r, 1)) do |u|
u.extra = {phone: student_data.cell(r, 8)}
u.user_id = user.id
end
end
else
# 系统已有用户关联sso认证用户
old_user.update(
login: "tfxy#{student_data.cell(r, 1)}",
lastname: student_data.cell(r, 2),
nickname: student_data.cell(r, 2),
certification: true,
professional_certification: true,
authentication: true,
profile_completed: true)
OpenUsers::Cas.find_or_create_by(uid: student_data.cell(r, 1)) do |u|
u.extra = {phone: student_data.cell(r, 8)}
u.user_id = old_user.id
end
end
end
end
task import_course_members: :environment do
desc "天府学院学生到课程分班"
course_member_data = xlsx.sheet(6)
course_member_data_last_row = course_member_data.last_row
school = School.find_or_create_by(name: '西南财经大学天府学院') do |d|
d.province = '四川省'
d.city = '成都'
end
2.upto(course_member_data_last_row) do |r|
course_group = CourseGroup.find_by(invite_code: course_member_data.cell(r, 5))
student = OpenUsers::Cas.find_by(uid: course_member_data.cell(r, 1))&.user
puts "------student --- #{course_member_data.cell(r, 1)}--course group--#{course_member_data.cell(r, 5)}"
if student.present? && course_group.present?
course_member = CourseMember.find_or_initialize_by(course_id: course_group.course_id, user_id: student.id) do |d|
d.role = 4
d.course_group_id = course_group.id
end
puts "--------course_member #{course_member.inspect}"
course_member.save! if !course_member.persisted?
end
end
end
end

@ -60,17 +60,17 @@ function requestForSignatrue (callback) {
/**
实践课程 平台提供涵盖基础入门案例实践和创新应用的完整实训项目体系通过由浅入深的实训路径帮助学生快速提升实战能力
实训项目 覆盖不同专业的IT实验和实训每周更新无需配置本机实验环境随时随地开启企业级真实实训
翻转课堂 自动评测实训任务支持技能统计提供教学活动分析报告减轻教师和助教的辅导压力免去作业发布和批改的困扰实时了解学生学习情况全面提升教师施教效率和水平
教学课堂 自动评测实训任务支持技能统计提供教学活动分析报告减轻教师和助教的辅导压力免去作业发布和批改的困扰实时了解学生学习情况全面提升教师施教效率和水平
单个课程和实训 获取课程/实训的简介 该课程或者实训展示的缩略图
*/
export function configShareForIndex (path) {
export function configShareForIndex (path) {
requestForSignatrue(() => {
var shareData = {
title: 'EduCoder - 首页',
desc: 'Educoder是一个面向计算机类的互联网IT教育和实战平台提供企业级工程实训以实现工程化专业教学的自动化和智能化。高校和企业人员可以在此开展计算机实践性教学活动将传统的知识传授和时兴的工程实战一体化。',
link: host + (path || ''),
imgUrl: window.__testImageUrl
imgUrl: window.__testImageUrl
|| host + '/react/build/images/share_logo_icon.jpg'
};
share(shareData)
@ -83,7 +83,7 @@ export function configShareForPaths () {
title: 'EduCoder - 实践课程',
desc: '平台提供涵盖基础入门、案例实践和创新应用的完整实训项目体系,通过由浅入深的实训路径,帮助学生快速提升实战能力。',
link: `${host}/paths`,
imgUrl: window.__testImageUrl
imgUrl: window.__testImageUrl
|| host + '/react/build/images/share_logo_icon.jpg'
};
share(shareData)
@ -97,7 +97,7 @@ export function configShareForShixuns () {
title: 'EduCoder - 实训项目',
desc: '覆盖不同专业的IT实验和实训每周更新无需配置本机实验环境随时随地开启企业级真实实训。',
link: `${host}/shixuns`,
imgUrl: window.__testImageUrl
imgUrl: window.__testImageUrl
|| host + '/react/build/images/share_logo_icon.jpg'
};
share(shareData)
@ -108,10 +108,10 @@ export function configShareForCourses () {
console.log('configShareForCourses', host)
var shareData = {
title: 'EduCoder - 翻转课堂',
title: 'EduCoder - 教学课堂',
desc: '自动评测实训任务,支持技能统计,提供教学活动分析报告,减轻教师和助教的辅导压力,免去作业发布和批改的困扰,实时了解学生学习情况,全面提升教师施教效率和水平。',
link: `${host}/courses`,
imgUrl: window.__testImageUrl
imgUrl: window.__testImageUrl
|| host + '/react/build/images/share_logo_icon.jpg'
};
share(shareData)
@ -127,7 +127,7 @@ export function configShareForCustom (title, desc, imgUrl, path) {
title: title,
desc: desc,
link: path ? `${host}/${path}` : _url,
imgUrl: imgUrl || window.__testImageUrl
imgUrl: imgUrl || window.__testImageUrl
|| host + '/react/build/images/share_logo_icon.jpg'
};
share(shareData)

@ -250,7 +250,7 @@ class Competitionteams extends Component{
<Content className={"teamsLayoutContent"}>
<Table className="teamsLayoutTable" columns={shixuncolumns} dataSource={this.state.shixundata} bordered pagination={false}/>
</Content>
<Content className={"teamsLayoutitle mt40"}>翻转课堂</Content>
<Content className={"teamsLayoutitle mt40"}>教学课堂</Content>
<Content className={"teamsLayoutContents"}>
<Table className="teamsLayoutTable" columns={coursecolumns} dataSource={this.state.coursedata} bordered pagination={false}/>
</Content>

@ -404,7 +404,8 @@ class CommonWorkList extends Component{
category: {},
b_order: 'desc',
searchtypes:false,
loadingstate:false
loadingstate:false,
comwbool:false
}
}
onTablePagination = (page) => {
@ -476,6 +477,16 @@ class CommonWorkList extends Component{
this.fetchList()
}
fetchList = () => {
if(this.state.comwbool===true){
console.log('arg_course_group2');
console.log(this.state.arg_course_group);
return
}
this.setState({
comwbool:true,
})
//分班
let workId=this.props.match.params.workId;
let courseId=this.props.match.params.coursesId;
@ -493,12 +504,23 @@ class CommonWorkList extends Component{
moduleName: '作品列表'
}))
}
}).catch((error)=>{
setTimeout(() => {
this.setState({
comwbool:false,
})
}, 1000)
}).catch((error)=>{
console.log(error)
this.setState({
isSpin:false,
loadingstate:false
})
setTimeout(() => {
this.setState({
comwbool:false,
})
}, 1000)
})
@ -514,6 +536,7 @@ class CommonWorkList extends Component{
})
}
courseGroupOptionChange = (values, isAllChecked) => {
this.setState({arg_course_group: isAllChecked ? [] : values, page: 1}, () => {
this.fetchList()
})
@ -792,10 +815,10 @@ class CommonWorkList extends Component{
<div style={{ background: '#fff'}} className="workListContent">
{ isAdmin && hasData && <ul className="clearfix" style={{padding: "20px 40px 10px", position: 'relative', paddingLeft: '24px'}}>
<CheckAllGroup options={options_teacher_comment} label={'你的评阅:'} onChange={this.teacherCommentOptionChange}></CheckAllGroup>
<CheckAllGroup options={options_status} label={'作品状态:'} onChange={this.statusOptionChange}></CheckAllGroup>
{isGroup && <CheckAllGroup options={options_member_work} label={'组内角色:'} onChange={this.memberWorkChange}></CheckAllGroup>}
{options_course_group.length > 1 && <CheckAllGroup options={options_course_group} label={'分班情况:'} onChange={this.courseGroupOptionChange} checkboxGroupStyle={{width: '980px'}}></CheckAllGroup>}
<CheckAllGroup comwbool={this.state.comwbool} options={options_teacher_comment} label={'你的评阅:'} onChange={this.teacherCommentOptionChange}></CheckAllGroup>
<CheckAllGroup comwbool={this.state.comwbool} options={options_status} label={'作品状态:'} onChange={this.statusOptionChange}></CheckAllGroup>
{isGroup && <CheckAllGroup comwbool={this.state.comwbool} options={options_member_work} label={'组内角色:'} onChange={this.memberWorkChange}></CheckAllGroup>}
{options_course_group.length > 1 && <CheckAllGroup comwbool={this.state.comwbool} options={options_course_group} label={'分班情况:'} onChange={this.courseGroupOptionChange} checkboxGroupStyle={{width: '980px'}}></CheckAllGroup>}
{/* value={search} */}

@ -1,62 +1,69 @@
import React,{ Component } from "react";
import { WordsBtn } from "educoder";
import { Checkbox } from 'antd'
const CheckboxGroup = Checkbox.Group;
class CheckAllGroup extends Component{
constructor(props){
super(props);
this.state = {
checkAll: true,
checkedValues: []
}
}
onCheckAll = () => {
this.setState({
'checkAll': true,
checkedValues: []
})
this.props.onChange && this.props.onChange([], true);
}
onChange = (checkedValues) => {
if (checkedValues.length > 0) {
this.setState({
'checkAll': false,
checkedValues
})
this.props.onChange && this.props.onChange(checkedValues, false)
} else {
this.setState({
'checkAll': true,
checkedValues: []
})
this.props.onChange && this.props.onChange(checkedValues, true);
}
console.log(checkedValues, arguments)
}
render() {
let { label, options, checkboxGroupStyle }=this.props;
const { checkAll, checkedValues } = this.state;
return (
<li className="clearfix">
<style>{`
.groupList .ant-checkbox-group-item{
margin-bottom:5px;
}
`}</style>
<span className="fl mr10 color-grey-8">{label}</span>
<span className="fl mr25">
<a href="javascript:void(0);" id="comment_no_limit" className={`pl10 pr10 ${checkAll ? 'check_on' : ''}`} onClick={this.onCheckAll}>全部</a>
</span>
<div className="fl groupList" style={{maxWidth:"990px"}}>
{
options.length > 1 && <CheckboxGroup options={options} onChange={this.onChange} value={checkedValues} style={checkboxGroupStyle}/>
}
</div>
</li>
)
}
}
export default CheckAllGroup;
import React,{ Component } from "react";
import { WordsBtn } from "educoder";
import { Checkbox } from 'antd'
const CheckboxGroup = Checkbox.Group;
class CheckAllGroup extends Component{
constructor(props){
super(props);
this.state = {
checkAll: true,
checkedValues: []
}
}
onCheckAll = () => {
this.setState({
'checkAll': true,
checkedValues: []
})
this.props.onChange && this.props.onChange([], true);
}
onChange = (checkedValues) => {
try {
if(this.props.comwbool===true){
return
}
}catch (e) {
}
if (checkedValues.length > 0) {
this.setState({
'checkAll': false,
checkedValues
})
this.props.onChange && this.props.onChange(checkedValues, false)
} else {
this.setState({
'checkAll': true,
checkedValues: []
})
this.props.onChange && this.props.onChange(checkedValues, true);
}
console.log(checkedValues, arguments)
}
render() {
let { label, options, checkboxGroupStyle }=this.props;
const { checkAll, checkedValues } = this.state;
return (
<li className="clearfix">
<style>{`
.groupList .ant-checkbox-group-item{
margin-bottom:5px;
}
`}</style>
<span className="fl mr10 color-grey-8">{label}</span>
<span className="fl mr25">
<a href="javascript:void(0);" id="comment_no_limit" className={`pl10 pr10 ${checkAll ? 'check_on' : ''}`} onClick={this.onCheckAll}>全部</a>
</span>
<div className="fl groupList" style={{maxWidth:"990px"}}>
{
options.length > 1 && <CheckboxGroup options={options} onChange={this.onChange} value={checkedValues} style={checkboxGroupStyle}/>
}
</div>
</li>
)
}
}
export default CheckAllGroup;

@ -250,7 +250,7 @@ class Competitionteams extends Component{
<Content className={"teamsLayoutContent"}>
<Table className="teamsLayoutTable" columns={shixuncolumns} dataSource={this.state.shixundata} bordered pagination={false}/>
</Content>
<Content className={"teamsLayoutitle mt40"}>翻转课堂</Content>
<Content className={"teamsLayoutitle mt40"}>教学课堂</Content>
<Content className={"teamsLayoutContents"}>
<Table className="teamsLayoutTable" columns={coursecolumns} dataSource={this.state.coursedata} bordered pagination={false}/>
</Content>

@ -55,7 +55,7 @@ class CoursesHome extends Component{
}
componentDidMount(){
document.title="翻转课堂";
document.title="教学课堂";
const upsystem=`/users/system_update.json`;
axios.get(upsystem).then((response)=>{
let updata=response.data;
@ -159,7 +159,7 @@ class CoursesHome extends Component{
onClick={ () => this.changeStatus("created_at")}>最新</a>
<a className={ order == "visits" ? "fl mr20 font-16 bestChoose active" : "fl mr20 font-16 bestChoose"}
onClick={ () => this.changeStatus("visits")}>最热</a>
{this.props.user&&this.props.user.user_identity==="学生"?"":<span className={ "fr font-16 bestChoose color-blue" } onClick={(url)=>this.getUser("/courses/new")}>+新建翻转课堂</span>}
{this.props.user&&this.props.user.user_identity==="学生"?"":<span className={ "fr font-16 bestChoose color-blue" } onClick={(url)=>this.getUser("/courses/new")}>+新建教学课堂</span>}
{/*<div className="fr mr5 search-new">*/}
{/*/!* <Search*/}

@ -690,7 +690,7 @@ class CoursesNew extends Component {
<a className="btn colorgrey fl hovercolorblue "
href={this.props.match.params.coursesId === undefined ?"/courses":this.props.current_user&&this.props.current_user.first_category_url}
>
{this.props.match.params.coursesId === undefined ?"翻转课堂":dataname}
{this.props.match.params.coursesId === undefined ?"教学课堂":dataname}
</a>
<span className="color-grey-9 fl ml3 mr3">&gt;</span>
<span className="fl cdefault">{this.props.match.params.coursesId === undefined ?"新建课堂":"编辑课堂"}</span>

@ -721,7 +721,7 @@ class Goldsubject extends Component {
{/*</Breadcrumb>*/}
<p className="clearfix mb20 mt10">
<a className="btn colorgrey fl hovercolorblue " href={Whethertocreateanewclassroom===true?"/courses":this.props.current_user&&this.props.current_user.first_category_url}
>{Whethertocreateanewclassroom===true?"翻转课堂":name}</a>
>{Whethertocreateanewclassroom===true?"教学课堂":name}</a>
<span className="color-grey-9 fl ml3 mr3">&gt;</span>
<span className="fl cdefault">{Whethertocreateanewclassroom===true?"新建课堂":"编辑课堂"}</span>
</p>

@ -1097,7 +1097,7 @@ submittojoinclass=(value)=>{
{/*<li><a href={this.props.Headertop===undefined?"":'/courses'}>课堂</a></li>*/}
<li className={`${coursestype === true ? 'pr active' : 'pr'}`}>
{/*<a href={this.props.Headertop===undefined?"":this.props.Headertop.course_url}>课堂</a>*/}
<Link to={this.props.Headertop===undefined?"":'/courses'}>翻转课堂</Link>
<Link to={this.props.Headertop===undefined?"":'/courses'}>教学课堂</Link>
</li>
<li className={`${activeShixuns === true ? 'pr active' : 'pr'}`}>
<Link to="/shixuns">实训项目</Link>
@ -1183,7 +1183,7 @@ submittojoinclass=(value)=>{
onBlur={(e)=>this.hideshowSearchOpen(e)} onMouseLeave={()=>this.setevaluatinghides()}>
<Search
id={"HeaderSearchs"}
placeholder="实践课程/翻转课堂/实训项目/交流问答"
placeholder="实践课程/教学课堂/实训项目/交流问答"
onInput={()=>this.onKeywordSearchKeyDowns()}
onSearch={(value) => this.onKeywordSearchKeyDown(value)}
// onPressEnter={this.onKeywordSearchKeyDown}
@ -1230,7 +1230,7 @@ submittojoinclass=(value)=>{
<ul className="edu-menu-list" style={{top:'60px'}}>
{/*<span className="bor-bottom-greyE currentName task-hide">{user.username}</span>*/}
<li><Link to={`/users/${this.props.current_user.login}/courses`}>我的个人主页</Link></li>
{coursestypes===true?"":<li><Link to={`/users/${this.props.current_user===undefined?"":this.props.current_user.login}/courses`}>{this.props.user&&this.props.user.main_site===false?"我的课堂":"我的翻转课堂"}</Link></li>}
{coursestypes===true?"":<li><Link to={`/users/${this.props.current_user===undefined?"":this.props.current_user.login}/courses`}>{this.props.user&&this.props.user.main_site===false?"我的课堂":"我的教学课堂"}</Link></li>}
{/* p 老师 l 学生 */}
{shixuntype===true?"":<li><Link to={`/users/${this.props.current_user===undefined?"":this.props.current_user.login}/shixuns`}>我的实训项目</Link></li>}
{pathstype===true?"":<li><Link to={`/users/${this.props.current_user===undefined?"":this.props.current_user.login}/paths`}>{this.props.user&&this.props.user.main_site===false?"我的课程":"我的实践课程"}</Link></li>}
@ -1282,7 +1282,7 @@ submittojoinclass=(value)=>{
<div className="overPart"></div>
<ul className={coursestypes===true&&this.props.user&&this.props.user.main_site===false?"fl headwith100b edu-txt-center pr ul-leftline":"fl with50 edu-txt-center pr ul-leftline"}>
{this.props.current_user&&this.props.current_user.user_identity==="学生"?"":coursestypes===false?
<li><a onClick={(url)=>this.getUser("/courses/new")}>{this.props.user&&this.props.user.main_site===false?"新建课堂":"新建翻转课堂"}</a></li>:""
<li><a onClick={(url)=>this.getUser("/courses/new")}>{this.props.user&&this.props.user.main_site===false?"新建课堂":"新建教学课堂"}</a></li>:""
}
{shixuntype===true?"":
<li><a onClick={(url)=>this.getUser("/shixuns/new","newshixuns")}>新建实训项目</a></li>
@ -1296,7 +1296,7 @@ submittojoinclass=(value)=>{
{coursestypes===true&&this.props.user&&this.props.user.main_site===false?"":<ul className="fl with50 edu-txt-center">
{coursestypes===true?"":<li>
<a onClick={this.tojoinclass}>{this.props.user&&this.props.user.main_site===false?"加入课堂":"加入翻转课堂"}</a>
<a onClick={this.tojoinclass}>{this.props.user&&this.props.user.main_site===false?"加入课堂":"加入教学课堂"}</a>
</li>}
{Addcoursestypes===true?<Addcourses

@ -163,7 +163,7 @@ export function TPMIndexHOC(WrappedComponent) {
}else if(this.props.match.path==="/paths"){
document.title="实践课程";
}else if(this.props.match.path==="/courses"){
document.title="翻转课堂";
document.title="教学课堂";
}
// if(this.props.match.path==="/"){

@ -953,9 +953,9 @@ class Shixuninformation extends Component {
<div>
{this.state.mainvalues === undefined && this.state.subvalues === undefined || this.state.mainvalues === "" && this.state.subvalues === "" ? "" :
<div className={"font-12"} style={{'max-width': '600px'}}>
{`${this.state.mainvalues === undefined || this.state.mainvalues === "" ? "" : this.state.mainvalues}`}
{`${this.state.subvalues === undefined || this.state.subvalues === "" ? "" : this.state.mainvalues === undefined || this.state.mainvalues === "" ? this.state.subvalues : this.state.subvalues}`}
{`${this.state.mainvalues === undefined || this.state.mainvalues === "" ? "" : this.state.mainvalues}${this.state.subvalues === undefined || this.state.subvalues === "" ? "" :
{`${this.state.mainvalues === undefined || this.state.mainvalues === "" ? "" : this.state.mainvalues}`}
{`${this.state.subvalues === undefined || this.state.subvalues === "" ? "" : this.state.mainvalues === undefined || this.state.mainvalues === "" ? this.state.subvalues : this.state.subvalues}`}
{`${this.state.mainvalues === undefined || this.state.mainvalues === "" ? "" : ""}${this.state.subvalues === undefined || this.state.subvalues === "" ? "" :
this.state.mainvalues === undefined || this.state.mainvalues === "" ? this.state.subvalues : this.state.subvalues}`}
</div>}
</div>

@ -620,9 +620,9 @@ class Newshixuns extends Component {
<div>
{this.state.mainvalues === undefined && this.state.subvalues === undefined || this.state.mainvalues === "" && this.state.subvalues === "" ? "" :
<div className={"font-12"} style={{'max-width': '600px'}}>
{`${this.state.mainvalues === undefined || this.state.mainvalues === "" ? "" : this.state.mainvalues}`}
{`${this.state.mainvalues === undefined || this.state.mainvalues === "" ? "" : this.state.mainvalues}`}
{`${this.state.subvalues === undefined || this.state.subvalues === "" ? "" : this.state.mainvalues === undefined || this.state.mainvalues === "" ? this.state.subvalues : this.state.subvalues}`}
{`${this.state.mainvalues === undefined || this.state.mainvalues === "" ? "" : this.state.mainvalues}${this.state.subvalues === undefined || this.state.subvalues === "" ? "" :
{`${this.state.mainvalues === undefined || this.state.mainvalues === "" ? "" : ""}${this.state.subvalues === undefined || this.state.subvalues === "" ? "" :
this.state.mainvalues === undefined || this.state.mainvalues === "" ? this.state.subvalues : this.state.subvalues}`}
</div>}

@ -15,7 +15,7 @@ class InfosBanner extends Component{
super(props);
}
render(){
let {
let {
data ,
id,
login,
@ -87,27 +87,27 @@ class InfosBanner extends Component{
<div class="fl headtab mt20">
<span>{is_current ? "我":"TA"}的经验值</span>
<a style={{"cursor":"default"}}>{data && data.experience}</a>
</div>
</div>
<div class="fl headtab mt20 pr leftTransform pl20">
<span>{is_current ? "我":"TA"}的金币</span>
<a style={{"cursor":"default"}}>{data && data.grade}</a>
</div>
</div>
{
is_current ?
is_current ?
<span className="fl mt35 ml60">
{
data && data.attendance_signed ?
data && data.attendance_signed ?
<span className="user_default_btn user_grey_btn font-18">已签到</span>
:
<a herf="javascript:void(0);" onClick={this.props.signFor} className="user_default_btn user_yellow_btn fl font-18">签到</a>
}
</span>
</span>
:
<span className="fl mt35 ml60">
<LinkAfterLogin
{...this.props}
{...this.state}
className="user_default_btn user_yellow_btn fl font-18"
<LinkAfterLogin
{...this.props}
{...this.state}
className="user_default_btn user_yellow_btn fl font-18"
to={`/messages/${login}/message_detail?target_ids=${id}`}
>
私信
@ -120,7 +120,7 @@ class InfosBanner extends Component{
{coursestypes===true?"":<li className={`${moduleName == 'courses' ||moduleName == undefined ? 'active' : '' }`}>
<Link
onClick={() => this.setState({moduleName: 'courses'})}
to={`/users/${username}/courses`}>翻转课堂</Link>
to={`/users/${username}/courses`}>教学课堂</Link>
</li>}
{shixuntype===true?"":<li className={`${moduleName == 'shixuns' ? 'active' : '' }`}>
<Link
@ -128,7 +128,7 @@ class InfosBanner extends Component{
to={`/users/${username}/shixuns`}>实训项目</Link>
</li>}
{pathstype===true?"":<li className={`${moduleName == 'paths' ? 'active' : '' }`}>
<Link
<Link
onClick={() => this.setState({moduleName: 'paths'})}
to={`/users/${username}/paths`}>实践课程</Link>
</li>}

@ -158,7 +158,7 @@ class SearchPage extends Component{
<div className="tabtitles2">
<Menu mode="horizontal" className="tabtitless" selectedKeys={tab} onClick={this.changeTab}>
<Menu.Item className={"tabtitle1"} key="1">实践课程</Menu.Item>
<Menu.Item className={"tabtitle2"} key="2">翻转课堂</Menu.Item>
<Menu.Item className={"tabtitle2"} key="2">教学课堂</Menu.Item>
<Menu.Item className={"tabtitle2"} key="0">实训项目</Menu.Item>
<Menu.Item className={"tabtitle2"} key="3">交流问答</Menu.Item>
</Menu>

@ -0,0 +1,5 @@
require 'rails_helper'
RSpec.describe DeleteCourseNotifyJob, type: :job do
pending "add some examples to (or delete) #{__FILE__}"
end

Binary file not shown.
Loading…
Cancel
Save